我是一名编程专业的学生,直到现在我才真正了解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个字符,在这种情况下,至少。