【问题标题】:getchar not taken in consideration after scanf [duplicate]在scanf之后没有考虑getchar [重复]
【发布时间】:2014-11-09 12:50:55
【问题描述】:

我正在学习 C 语言编程,并尝试创建一个询问用户年龄的程序。当用户写下他的年龄(例如 18 岁)时,他会收到消息“所以你已经 18 岁”。当我执行 .exe 文件时,它会在您看到消息后自动关闭,速度如此之快以至于您看不到它。然后我添加了 getchar 以便用户阅读消息,然后按 Enter 键。这是我写的程序:

#include <stdio.h>
#include <stdlib.h>

int main()

{
int age=0;
printf("How old are you?\n");
scanf("%d",&age);
printf("So you're %d years old", age);
getchar();
return 0;
}

不幸的是,当我执行 .exe 文件时,它仍然会自动关闭,就像 getchar() 不存在一样,我不知道为什么。

【问题讨论】:

  • 改用getch()。
  • @barak manos 谢谢!它有效!
  • 不客气,别忘了点击绿色 V :)
  • ^^ 这里没有绿色 V。您发表评论而不是答案。但我投票赞成你的评论顺便说一句,没有人投票给我的问题。没拿到学生证T_T
  • 是的,你是从我这里得到的,因为这个问题是建设性的(虽然我不确定这里还没有被问到)。

标签: c


【解决方案1】:
scanf("%d",&age);

当程序执行到上述行时,键入一个整数并按回车键。 整数由scanf 占用,您按下的\n(换行符或Enter)保留在stdin 中,由getchar() 占用。要摆脱它,请替换您的@987654326 @与

scanf("%d%*c",&age);

%*c 告诉scanf 扫描一个字符然后丢弃它。在您的情况下,%*c 读取换行符并丢弃它。

另一种方法是在代码中的 scanf 之后使用以下内容来刷新 stdin:

while ( (c = getchar()) != '\n' && c != EOF );

请注意,c 是上述行中的 int

【讨论】:

  • 感谢您的回答!它有效!
  • @Scientifica 考虑通过单击投票按钮下方的绿色复选框来接受它。
  • 直到他们真正点击它才会变成绿色。
  • @FilipeGonçalves 他们向我展示了一条消息,因此我不得不等待 2 分钟。然后我去吃饭回来点绿色的勾^^
【解决方案2】:

您只是无法看到结果,因为您是从窗口环境启动程序,并且窗口在其内部任务完成后立即关闭。如果您在预先存在的 shell 窗口(Linux、Mac 或 Windows)中从命令行运行已编译的程序,则在您返回提示符后结果将保留在屏幕上(除非您已通过执行某种清屏)。更好的是,在这种情况下,您不需要额外的 getchar() 调用。

对于 Windows,在打开命令提示符窗口后,您会发出“cd”命令以切换到包含已编译程序的目录,然后键入其名称。对于 Linux(我猜是 Mac,因为 Mac 在底层是 UNIX),在使用“cd”切换到适当的目录后,您需要在程序名称前输入 ./。

【讨论】:

  • 你是对的!但是用户不会使用编译器打开程序。
  • 鉴于这是一个明显的早期学习练习,唯一的“用户”很可能是程序员。此外,至少在 Linux 中,仅命令行的应用程序仍然很常见。自从我使用 Windows 以来已经有一段时间了,但我记得可以设置一个快捷方式来打开一个窗口,然后在程序完成后保持打开状态——将这样一个快捷方式(或创建它的说明)与程序打包在一起如果要真正为非 Linux 操作系统发布纯文本的命令行界面应用程序,这可能就足够了。
  • 对不起,我没有明白你的意思,我是初学者,除了 Windows 没有任何其他操作系统。请你澄清一下好吗?
  • 假设您单击一个图标来启动已编译的程序,您应该能够将图标的设置更改为“保持窗口打开”或取消选中“程序完成时关闭”或类似的东西.
  • 是的,这是真的。事实上,在编译器中,窗口一直打开。但是,如果我想将 .exe 文件提供给任何人,这个人将简单地执行该文件而无需任何编译器。确实,这只是一个练习。但我正在学习编程,谁知道有一次我需要制作一个类似的程序。然后我会发现这个问题并且无法解决它。我们通过练习来学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2010-11-26
相关资源
最近更新 更多