2014-10-04 153 views
-3
while((c= getchar()) != '\n' && c != EOF); 

我在使用gets()输入字符串时遇到了问题。我在google上发现它在输入缓冲区中保留了'\ n'的值。我在这里搜索并找到了上面的代码来解决我的问题。但是我并不完全了解它。这是做什么?任何人都请赐教。这是干什么的:while((c = getchar())!=' n'&& c!= EOF);

+2

不,你需要自己学习C++,然后在这里发表一个问题 – 2014-10-04 12:30:55

+0

我把'C++'标记改为'C'标记,因为它纯粹是'C',而不是'C++'。 – Benio 2014-10-04 12:34:41

+5

@Benio不这样做。只要它是有效的C++代码,它也是有效的C并不重要。有时差异很重要。 – 2014-10-04 12:37:59

回答

2

该代码引入了一个while -loop。其退出条件分配整数cgetchar()返回的值,并检查它是否等于换行符('\n')或EOF。如果是,则退出循环。如果不是,则提取下一个字符,依此类推。

该代码基本上跳过所有字符,直到到达下一个换行符或EOF。它相当于:

for (;;) 
{ 
    c = getchar(); // c has been declared elsewhere 
    if (c == '\n' || c == EOF) 
     break; 
} 
+0

是啊!这种方式比单纯的浓缩要容易得多。 +1 – Adi 2014-10-04 12:46:00

+0

@gotolabeladi,你没有足够的代表upvote/+ 1,但你仍然可以接受它 – 2014-10-04 13:03:09

3

C++中的赋值也会产生被赋值的值。因此c= getchar()正在读取文件中的下一个字符,而(c= getchar()) != '\n'正在将该读取的字符与新行字符进行比较。还有另外一个测试是为了确保特殊值EOF的值,以确保在到达文件末尾时它不会继续尝试读取。

while和结束分号之间没有声明,因为没有其他任何事情需要完成,所以您将输入信息丢弃。

+0

所以基本上它是在我输入字符串后,它读取字符串,直到它找到一个新的行字符和EOF ie -1 ?? – Adi 2014-10-04 12:42:01

+2

@gotolabeladi直到它找到一个新的行字符***或*** EOF。 – Boann 2014-10-04 14:13:05