gpt4 book ai didi

C/C++ 初学者 - 使用 stdin 进行 fgets 导致意外的 'loop' 结果

转载 作者:行者123 更新时间:2023-11-30 17:31:15 25 4
gpt4 key购买 nike

我是一名编程学生,到目前为止只真正了解过 Java。这个学期是我们第一次使用 C,我在理解一些最简单的函数时遇到了很多困难。我真的不知道自己在做什么。我什至无法让 Eclipse 与 MinGW 一起正常工作,所以我最终放弃并恢复到 Netbeans。

所以基本上我正在尝试使用 fgets 读取 switch-case 菜单的用户输入,但即使在最简单的情况下我也无法让 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(带有 MinGW)

创建 C 项目时,我选择 File=> New Project=> C/C++=> C/C++ Application

编辑:当我运行该程序时,我尝试过:1)右键单击项目文件=>运行;和2) 单击 Netbeans 功能区中的绿色大箭头;
....都不起作用。

最佳答案

这段代码应该可以工作,但是为了能够输入任何内容,您需要在正确的终端中运行。

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

或者,您的 IDE 中可能有一个设置,可以使用 cmd.exe 或内置终端运行程序。

最后一点。当需要缓冲区大小时,您应该学习使用 sizeof。 IE。更改此:

 fgets(name,10,stdin);

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

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

关于C/C++ 初学者 - 使用 stdin 进行 fgets 导致意外的 'loop' 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com