C语言while(scanf("%d",&num)==1);语句的一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言while(scanf("%d",&num)==1);语句的一个问题相关的知识,希望对你有一定的参考价值。

参考技术A 这个要从scanf函数的返回值说起。
比如scanf("%d",
&n);有如下情况:
1.
当输入为一个整数时,读取到n,scanf返回值是1(表示成功读取了一个数),ok,继续执行
2.
当输入为eof(通常切的题目有多组数据,会使用eof表示输入结束),这时,没有读取输入到n,scanf返回值是-1,所以您的代码==1就不成立,所以会跳出循环。而如果是while(scanf("%d",
&n))的话,即等价于while(-1),显然还会继续循环,所以超时。
所以可以有以下用法:
1.
while(scanf("%d",
&n)
==
1)
2.
while(scanf("%d",
&n)
!=
eof)
3.
while(~scanf("%d",
&n))
当输入为eof时,-1求反为0哦,所以也可以。
参考技术B scanf()函数的返回值是返回成功赋值的数据项数,
所以不论你输入的是数字还是空格,只要正常读入了,scanf()函数的返回值就是1。
只不过空格是将空格的ACSII码值读入赋值给num了

c语言中多个scanf怎么输入

//仅使用一次 scanf() 的情况
scanf("%d %d %d",&num1,&num2,&num3); //使用空格分开
/*
输入时,每个数字使用空格分开,例如:1 12 123,等同于:num1 = 1,num2 = 12,num3 = 123。也可以使用逗号分隔,scanf("%d,%d,%d",&num1,&num2,&num3);那么, 输入时,数字之间应使用 ,分隔开,例如:1,12,123.总之,scanf(” “)双引号中修饰符之间缺少什么,输入时就应补什么。*/scanf("%c%c%c",&ch1,&ch2,&ch3); //不使用空格
/*
输入时,读取3个字符,例如:abc,这样等同于:ch1 = 'a',ch = 'b',ch3 =
'c'。但在这里有一个问题,就是连续输入多个 int 数据时,就必须使用换行符了,例如:scanf("%d%d%d",&num1,&num2,&num3);输入时,应该是:1(回车键)
12(回车键)
123(回车键)
之所以要按下回车键,是因为输入 1 时,虽然屏幕上显示 1 ,但是 1 这个字符并没有被程序接收,而是停留在缓冲区,按下回车键之后,才会发送输入。*/
//使用循环
for(n = 0;n < 3;n++)
scanf("%d",num[n]);
参考技术A c语言中从键盘输入的输入语句最常用的是scanf语句,函数原型为int
scanf(
char
*format,args,...);
功能是从标准输入设备按format指向的格式字符串所规定的格式,输入数据给args所指向的单元.
c++中,可以使用scanf语句和cin(标准输入流)两种方式。标准输入流cin是从键盘向内存流动的数据流,用>>运算符从输入设备键盘取得数据送到输入流cin中。
参考技术B 1、程序运行时,不管有多少个scanf,一定要按scanf()语句规定的格式输入,否则可能会出现错误的结果。
2、编写程序时,遇到多个数据输入,不一定采用多个scanf语句。

以上是关于C语言while(scanf("%d",&num)==1);语句的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

c语言请问while循环为啥执行不了?

c语言 scanf("%d",&a);输入字符为啥会进入死循环?

C语言中静态局部变量的问题

C : while( scanf("%d",&num) != 1 ) 无限循环

C语言中如何实现输入输出多组数据,该如何结束输入

C语言do while问题