我是一名编程学生,直到现在才真正看过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);
}
任何建议都将不胜感激!
其他信息: 我正在跑 - 赢8(可怜的我)&amp; Netbeans IDE 8.0(含MinGW)
创建我的C项目时,我选择File =&gt;新项目=&gt; C / C ++ =&GT; C / C ++应用程序
编辑:当我运行程序时,我尝试过:
1)右键单击项目文件=&gt;跑;和
2)单击netbeans功能区中的绿色大箭头;
....既不起作用。
答案 0 :(得分:0)
此代码应该可以使用,但是为了能够输入任何内容,您需要在适当的终端中运行。
我的猜测是你在IDE中运行它并且它设置为使用管道作为stdin / stdout。相反,您应该启动cmd.exe
并在那里运行程序(您必须先导航到正确的目录)。
或者,您可以选择在IDE中使用cmd.exe
或使用内置终端运行程序。
最后一点。每当需要缓冲区大小时,您应该学会使用sizeof
。即改变这个:
fgets(name,10,stdin);
到
fgets(name, sizeof(name), stdin);
另外,请使用空格使您的代码更具可读性。阅读代码是编程的重要组成部分。
答案 1 :(得分:0)
1)你可能想在printf之后刷新文件(&#34;你是谁?&#34;);用fflush(stdout);
2)你有两个return语句(无害)。
除此之外,您的代码还可以。
答案 2 :(得分:0)
效果很好 - 但您可能希望在fflush(stdin);
来电之前使用fgets()
。
还记得fgets在用户输入后返回一个带有'\ n'的字符串 - 只用name[strlen(name)-1]='\0';
解决 - 这基本上是将NULL作为“字符串结束”符号,基本上你删除'\ n'。
并且不要将10
更改为sizeof(name)
- 这根本不重要,基本上它甚至可能更糟,因为你不能在函数中正确使用它(sizeof(name)并不总是匹配长度,将是指针的大小)。
您应该尝试使用MinGW进行编译,如果它不起作用,它肯定会对它起作用。
提醒:fgets()
可以让您输入数百万个字符,但在这种情况下,至少会输入前10个字符。