C/C++ 初学者 - 使用标准导致意外的"循环"结果



我是一名编程专业的学生,直到现在我才真正了解Java。这学期是我们第一次使用C语言,我在理解一些最简单的函数时遇到了很多麻烦。我真的不知道我在做什么。我甚至不能让Eclipse正确地与MinGW一起工作,所以我最终放弃并恢复到Netbeans。

所以基本上我试图使用fgets读取用户输入的切换菜单,但我不能让fgets在最简单的情况下工作。为了排除故障,我试着从网上复制一个简单的fgets示例,但即使这样也给了我意想不到的结果。

当我运行下面的代码时,它只是运行一个无限空循环(它根本不提示用户输入,它不接受任何用户输入,它只是永远"运行",控制台保持空白)。当我删除fgets行并删除对'name'变量的另一个引用时,它会像您期望的那样工作(打印用户输入提示符,然后结束)。

示例代码:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
  char name[10];
  printf("Who are you? ");
  fgets(name,10,stdin);
  printf("Glad to meet you, %s.n",name);
  return(0);
return (EXIT_SUCCESS);

}

任何建议将不胜感激!

其他信息:我正在运行- Win 8(可怜的我)& &;Netbeans IDE 8.0 (with MinGW)

当创建我的C项目时,我选择File=> New project => C/c++ => C/c++ Application

编辑:当我运行程序时,我试过:1)右键单击项目文件=>运行;和2)点击netbeans ribbon中的绿色大箭头;
…既不工作。

这段代码应该可以工作,但是为了能够输入任何东西,您需要在一个合适的终端中运行。

我猜你是在IDE中运行它,它被设置为使用管道作为stdin/stdout。相反,您应该启动cmd.exe并在其中运行程序(您必须首先导航到正确的目录)。

或者,在您的IDE中可以选择使用cmd.exe或内置终端来运行程序。

最后一点。当需要缓冲区大小时,您应该学会使用sizeof。例如:

 fgets(name,10,stdin);

 fgets(name, sizeof(name), stdin);

另外,请使用空格使您的代码更具可读性。阅读代码是编程的重要组成部分。

1)您可能需要在printf("Who are You ? ")之后刷新文件。");

。fflush (stdout);

2)您有两个返回语句(这是无害的)。

它工作完美-但您可能希望在fgets()调用之前使用fflush(stdin);。还要记住,fgets在用户输入后返回一个带有'n'的字符串-简单地使用name[strlen(name)-1]='';解决-这基本上是将NULL作为"字符串结束"符号,基本上您删除了'n'。不要将10更改为sizeof(name) -这根本无关紧要,基本上它甚至可能更糟,因为你不能在函数中正确使用它(sizeof(name)并不总是匹配长度,并且会是指针的大小)。您应该尝试用MinGW编译,如果它不起作用,它肯定会对它起作用。提醒一下:fgets()可能允许您输入百万字符,但它将接受前10个字符,在这种情况下,至少。

相关内容

  • 没有找到相关文章