S1E14中scanf返回值问题
int a,b;scanf("%d%d",&a,&b)
函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
以上是网上的解释
所以怎么才算成功读入,比如输入两个整型就算成功读入,如果输入字符型就不可以?
还有他上面的意思好像是说返回值为int型,还有不为int型的函数吗
以下代码注释中还有个问题
#include <stdio.h>
int main()
{
int num = 0;
long sum = 0L; // 0L表示类型为long的0
int status;
do
{
printf("请输入合法的数字:");
sum = sum + num;
status = scanf("%d", &num); //这里的意思是如果输入为整型成功读入status的值就为1,如果为字符型失败就为0?
} while(status == 1);
printf("结果是:%ld\n", sum);
return 0;
}
谢谢 是的。 本帖最后由 沉默的人e 于 2020-2-12 18:11 编辑
楼主看下这个
我输入3和e的时候,a = 1了,a = 1 是因为第一个3当字符输进去了,成功读取,1;第二个e输入时,不符合int类型,所以不能成功读取,0(大概可能应该是 a =1+0 = 1)
他说的成功读入大概其就是你输给它的值和他的类型是匹配的,你比如我用“%d”,后面输入值时,却输了“C”这么一个字符,那么scanf他就不能成功读取,返回值就是0了。
scan族函数很脆弱,用%d输入数据时,如果遇到非法输入,比如本来应该输入数字,但你却输入字符。这个时候它不会读入任何数据,你输入的字符还会留在缓存区。所以该函数很不安全,vs里禁止使用scanf函数,而使用更安全的scanf_s。小甲鱼说,scanf 返回值:
如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。
如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。
如果读取到标准输入流的结尾处,则返回 EOF。
也就是说返回值是用来判断是否输入非法数据或者没有得到想要的数据。
还有返回值可以是任何已知数据类型,包括int char 结构体和类等等。
页:
[1]