空字符串结束循环

时间:2012-05-29 10:16:44

标签: c

以下程序出了什么问题(这里发生了什么)?它应该在用户插入空字符串后按下for循环(仅按ENTER键),但在我的情况下,它以无限循环结束。我尝试了评论中没有成功的内容。

#include <stdio.h>
#include <string.h>                                      

struct S {
  char str [10];
};

int main(void)
{
  int n;
  struct S strings [10];
  for (n = 0; n < 10; n++) {
    # fflush(stdout);
    scanf("%s", strings[n].str);
    if (strlen(strings[n].str) == 0)
      break;
    # getchar();
  }
  printf("done");
  return 0;
}

当我用scanf替换gets(strings[n].str); 时,永远不会被打印。你会如何解决它?

This示例解决方案有效。与我的代码相比有什么不同吗?

4 个答案:

答案 0 :(得分:5)

回车键不是空字符串,它是ascii字符,或者更确切地说是两个字符CR和LF(在Windows上)。

答案 1 :(得分:2)

您不应该使用strlen来确定输入是否为空。正如其他人所说,当你按下ENTER键时,你会收到一两个字符。

您可以检查字符串中的第一个字符,看看它是'\n'还是'\r'

答案 2 :(得分:1)

scanf完全返回你输入的内容......即我想象的一对crlf!

答案 3 :(得分:1)

使用scanf的问题是它需要一些东西,而不是一个空字符串。你通过使用例如fgets代替scanf

if (fgets(strings[n].str, sizeof(strings[n].str), stdin))
{
    /* You got a string, it will contain the newline! */
}