C语言关于while (scanf("%d", &m) != EOF)的疑问?
scanf("%d", &n) 是从标准输入读入一个整数赋值给n,并且返回值是读入的值。
while( scanf(..) != EOF ) 就是一直从读取数据,直到读到一个EOF标记为止
EOF 是 end of line的意思,也就是行结束标识
您好,
在C语言中
while();为循环语句,其结果只有2种,while(0);0为假,跳出循环
while(1);1为真,继续执行循环体中的代码。
那么在while();括号中即为判断语句,在您的while(scanf("%d",&n)!=EOF&&n);
中有两个逻辑运算符分别为:!
(逻辑非)和
&&(逻辑与)运算。为同一级运算符,故从左往右执行!
!
(逻辑非)
在C语言中
一般会有!0
,!1两种比较常见。
而!0即
"true",条件语句为真,执行判断语句下面的语句,
!1即"false",条件语句为假,跳出判断语句不执行。
另有:
!n(n不等于0的任意正整数)结果都为"false",用数字表示即为"0",计算机能识别的语言只有"0"和"1","0"为假、"1"为真。
EOF表示:
End
Of
File,在电脑的术语缩写通常为
EOF,在作业系统决定资料源无更多的资料可读取。
scanf("%d",&n)!=EOF
即表示:返回值不等于EOF(即有效输入)
&&(逻辑与)
在C语言中
a&&b
若a,b有一个为0(包括同时为0),则a&&b=0;也就是说a,b都不为0
,判断为真,执行循环语句。
说了这么多,那么while(scanf("%d",&n)!=EOF&&n);说白了就是指:只要n不为0,则执行循环体中的代码。否则跳出!
在C++中
您可以使用:
while(cin>>n&&n)
解释的够累了,连运算符的优先级都讲到了。。。
哎,真心累啊!
int scanf(const char *format, ...)
返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF
所以,如果你在终端上输入数据,而不是从文件,那么基本上不会发生读错误,也就无从读取到EOF了。
如果你是在windows系统上执行此程序,偿试输入:Ctrl+Z,这是微软系统上输入EOF的方法。
或者,改为由文件输入数据。
另外,你用了getchar();也要注意输入缓冲区的问题。因为windows(或说DOS)系统上,输入一个回车,实际上是输入的0Dh ,0AH两个字符,这就导致,一个回车执行了2次循环,所以,在执行一次getchar()之后,执行一下清除缓冲区的操作
应该是运行环境问题
因为while 1 的写法,很容易被识别为一个死循环。然后环境会加以限制,防止长时间运行。
c语言中while(scanf(%c,&a)!=EOF)的用法,要详细解释
在C语言中,使用while(scanf(%c,&a)!=EOF)这一语句,可以实现持续读取字符直至遇到文件结束符。这里的scanf函数用于从标准输入读取数据,并将读取的字符存储到变量a中。如果读取成功,即输入未结束,则循环继续;一旦读取到EOF,循环终止。值得注意的是,数组a直接作为参数传递时,实际上是传递了数组的...
C语言:while(~scanf("%d",&n))什么意思呀? while(!scanf("%d
也就是说while(scanf("%d",&n),n)其实相当于while(n),只是因为要输入所以写成了while(scanf("%d",&n),n)这样而已
C语言里面while语句中是scanf语句是什么意思
while(scanf("%d",&t),t)这句话的意思是,输入一个整数t,如果输入的数非零,则执行while循环。这个是逗号运算符,取决于t的值
C语言while
scanf函数是有返回值类型的,scanf如果正确输入符合格式要求的值返回值为1,否则返回0。故:while(scanf("%d",&a))中如果正确输入整型值,scanf返回1,满足循环条件,执行循环输出字符“a”,如果输入非整型,scanf返回为0,循环结束。如图:
初学C语言 while(scanf("%d",&n)==1) 是什么意思?
scanf 函数有一个返回值,0表示接受输入失败,1表示接受输入成功。 while(scanf("%d",&x)==1) 的意思就是: 当接收输入变量x的值成功的时候,继续做循环。
C语言 while(scanf("%d",&n) == 1),==1有用么?
scanf返回成功读入的个数,==1表示有输入一个,如果空回车输入,或者多个输入则退出循环,这时候==1就派上用场了。两个等号用于比较。while(scanf("%d",&n) == 1)这句的意思是有一个成功输入则进行循环体内的工作,如果空回车或多输入个数,就是不正确的输入,比如输入:a1之类的,就退出循环了...
c语言的问题关于while(scanf(“%d",&sum)!=1)
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后ABC还在缓冲区内。scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为ABC一直在缓冲区内,所以...
while (scanf("%d %d",&a,&b)==2 && (a||b))什么意思
a||b的意思是a“或”b,逻辑运算符||进行或运算结果非0即1,如果a=b=0,a||b=0,否则a||b=1 while (scanf("%d %d",&a,&b)==2 && (a||b))意思是,如果scanf输入两个数成功即==2,&&(并且)a||b的值为真(即a||b=1)则,while()括号内的值为真,即为1。然后执行...
C语言关于while (scanf("%d", &m) != EOF)的疑问?
这得看scanf的定义:int scanf(const char *format, ...)返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF 所以,如果你在终端上输入数据,而不是从文件,那么基本上不会发生读错误,也就无从读取到EOF了。如果你是在windows系统上执行此程序,偿试输入...
C语言:while(scanf("%d",i)) 问题
而程序没有终止吧?!?分析代码可知,While循环的条件为输入一个整型值,因此只要一直输入的是整型,则满足循环条件,程序不会终止。楼主可以试着输入字符看看,程序就自然终止啦!补充,改为 { printf("%d",i); break;} 则输入一个整型即推出循环。希望对你有帮助 ...