对于我的作业,我们应该写一个校验和,继续显示校验和,直到检测到回车符(按下回车键)。我的校验和工作正常,并继续提示我一个字符串将其转换为校验和,但我的程序应该在我按下回车键后结束。在我的代码中,我设置了一个继续计算校验和的while循环。特别是我说:
while(gets(s) != "\r\n")
用户必须输入的字符串中的s。我也用scanf尝试了这个,我的循环看起来像:
while(scanf("%s",s) != '\n')
这不起作用。有谁能请给我一些有关如何使其工作的见解?感谢
答案 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中的字符串(实际上是指向字符数组的指针),您需要单独比较字符串中每个字符的值。