如何检测C中的回车?

时间:2014-11-11 21:58:52

标签: c return checksum

对于我的作业,我们应该写一个校验和,继续显示校验和,直到检测到回车符(按下回车键)。我的校验和工作正常,并继续提示我一个字符串将其转换为校验和,但我的程序应该在我按下回车键后结束。在我的代码中,我设置了一个继续计算校验和的while循环。特别是我说:

while(gets(s) != "\r\n")

用户必须输入的字符串中的s。我也用scanf尝试了这个,我的循环看起来像:

while(scanf("%s",s) != '\n')

这不起作用。有谁能请给我一些有关如何使其工作的见解?感谢

3 个答案:

答案 0 :(得分:0)

gets(s)返回s。您的条件将此指针与常量字符串litteral的地址进行比较。它将永远不会平等。您必须使用strcmp()来比较两个字符串。

您还应该通过检查!feof(stdin)以及其他读取错误(例如gets()返回NULL)来处理特殊情况,例如文件结尾。

请注意gets()将读取一整行,直到遇到'\ n'。 '\ n'不是返回的字符串的一部分。所以strcmp(s,"\r\n")!=0永远都是真的。

尝试:

while (!feof(stdin) && gets(s) && strcmp(s,"")) 

答案 1 :(得分:0)

在大多数情况下,stdin信息流会插入' \ n' (按换入而不是回车或LF + CR时,(换行符或换行符)。

char ch ;
while( (ch = getchar()) != '\n` )
{
     // update checksum using ch here
}

但是也要注意,通常在stdin上运行的函数在流中插入换行符之前不会返回,因此无法在输入字符时显示更新校验和。在上面的循环中,整个行将在getchar()首次返回之前被缓冲,然后所有缓冲的字符将立即更新。

答案 2 :(得分:-1)

要比较C中的字符串(实际上是指向字符数组的指针),您需要单独比较字符串中每个字符的值。