编程新手求助:scanf参数传递触发-Wint-conversion类型转换警告
问题分析与解决
错误原因
你遇到的-Wint-conversion警告,核心是scanf的用法完全错误:
- scanf的第一个参数必须是格式控制字符串(比如
"%d"),用来指定要读取的输入类型;但你现在传的是printf("Enter your first no.")的返回值——这个返回值是printf成功输出的字符个数,是整数类型,和scanf需要的指针类型格式串不匹配,所以编译器抛出警告。 - 另外,
int a = scanf(...)的写法也不对,scanf的返回值是成功读取的输入项数量,不是你输入的数字本身。
修正后的代码
#include<stdio.h> #include<string.h> int main() { int a, b; // 先定义存储输入值的变量 printf("Enter your first no."); scanf("%d", &a); // %d指定读取整数,&a是变量a的地址,让scanf把输入存到a中 printf("Enter your second no."); scanf("%d", &b); int c = a + b; printf("your sum is : %d ", c); return 0; }
关键说明
scanf("%d", &a):"%d"是格式串,表示要读取一个整数;&a是取变量a的地址,scanf需要通过地址把用户输入的数值写入到变量a里。- 必须把提示输出和输入读取分开写,不要把printf的返回值传给scanf,这是完全错误的用法。
内容的提问来源于stack exchange,提问作者Achyut Anand
相关产品推荐
相关产品推荐

