C:输入中的无限循环

时间:2013-10-30 22:20:43

标签: c loops stdin

这是我的功能,问题是 它永远不会停止在命令行中获取输入。
我无法弄清楚放置return 0的正确行在哪里。

int my_rot13(int c) {
    if ('a' <= tolower(c) && tolower(c) <= 'z')
        return tolower(c)+13 <= 'z' ? c+13 : c-13;
    return c;
}

int main() {

  int k, c;
  char *p;

  if (argc < 2) {
    while ((c = getc(stdin)) != EOF) {
      putchar(my_rot13(c));  
    }
    return 0; 
  }

  for (k = 1; k < argc; k++) {
    for (p = argv[k]; *p != '\0'; p++) {
      putchar(my_rot13(*p));
    }
    putchar(' ');
  }
  putchar('\n');

  return 0;
}

如果我传递了./a.out "hey"之类的标准输入,则可以退出程序。

但是当我进入用户输入模式时 我无法摆脱这个功能。

2 个答案:

答案 0 :(得分:1)

当您手动输入输入时,需要将EOF字符发送到getc()。您可以使用Ctrl-D在Linux上执行此操作,使用Ctrl-Z在Windows上执行此操作。另一种选择是让你测试换行符('\ n')。

答案 1 :(得分:0)

如果您从标准输入中捕获,请使用'\n'代替EOF