while((c= getchar()) != '\n' && c != EOF);
我在使用gets()输入字符串时遇到了问题。我在google上发现它在输入缓冲区中保留了'\ n'的值。我在这里搜索并找到了上面的代码来解决我的问题。但是我并不完全了解它。这是做什么?任何人都请赐教。这是干什么的:while((c = getchar())!=' n'&& c!= EOF);
while((c= getchar()) != '\n' && c != EOF);
我在使用gets()输入字符串时遇到了问题。我在google上发现它在输入缓冲区中保留了'\ n'的值。我在这里搜索并找到了上面的代码来解决我的问题。但是我并不完全了解它。这是做什么?任何人都请赐教。这是干什么的:while((c = getchar())!=' n'&& c!= EOF);
该代码引入了一个while
-loop。其退出条件分配整数c
getchar()
返回的值,并检查它是否等于换行符('\n'
)或EOF
。如果是,则退出循环。如果不是,则提取下一个字符,依此类推。
该代码基本上跳过所有字符,直到到达下一个换行符或EOF
。它相当于:
for (;;)
{
c = getchar(); // c has been declared elsewhere
if (c == '\n' || c == EOF)
break;
}
是啊!这种方式比单纯的浓缩要容易得多。 +1 – Adi 2014-10-04 12:46:00
@gotolabeladi,你没有足够的代表upvote/+ 1,但你仍然可以接受它 – 2014-10-04 13:03:09
C++中的赋值也会产生被赋值的值。因此c= getchar()
正在读取文件中的下一个字符,而(c= getchar()) != '\n'
正在将该读取的字符与新行字符进行比较。还有另外一个测试是为了确保特殊值EOF
的值,以确保在到达文件末尾时它不会继续尝试读取。
在while
和结束分号之间没有声明,因为没有其他任何事情需要完成,所以您将输入信息丢弃。
不,你需要自己学习C++,然后在这里发表一个问题 – 2014-10-04 12:30:55
我把'C++'标记改为'C'标记,因为它纯粹是'C',而不是'C++'。 – Benio 2014-10-04 12:34:41
@Benio不这样做。只要它是有效的C++代码,它也是有效的C并不重要。有时差异很重要。 – 2014-10-04 12:37:59