p-坚持 2019-03-14 10:41 采纳率: 0%
浏览 465

用Xcode编译,有scanf的代码,二次执行后无法正常输入?

比如这个简单的代码

#include <stdio.h>
int main()
{
      int p;
      scanf("%d",&p);
      printf("%d",p);
      return 0;
}

第一次执行时可以正常输入输出,但第二次执行,输入一个数,不会有任何显示,按回车后却可以正常运行,输入的数也会被正常打印(键盘输入,但屏幕不显示输入数,执行后可打印)这是什么问题?

网上没有找到相关的问题,试了加getchar等办法,不过应该不是缓冲区问题,而是Xcode编译器的问题。
有没有什么解决办法呢?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 08:00
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在C++中,当你使用scanfgetchar来读取用户输入时,它们会将输入的数据写入到一个字符数组中。然而,在某些情况下,当程序再次执行时,这些数据可能会被覆盖掉,导致你看到的是之前的结果而不是新的输入。

    为了解决这个问题,你可以尝试以下几种方法:

    1. 使用fgets函数来读取用户的输入,它会将输入的内容保存在一个字符串中,并且不会改变原有文件中的内容。这比直接调用scanfgetchar要安全得多。

    2. 如果你的输入是一个整数,则可以先将其转换成字符串再进行比较和处理。

    3. 将输入的内容放入一个临时变量中,然后在下次执行时再将此变量赋值给原始变量。

    4. 在每次执行前清空输入缓存区,例如使用clear_input()函数。

    5. 可以考虑使用iostream库中的cin函数代替scanfgetchar,这样就可以避免上述问题。

    6. 另外,如果你的程序中有多个输入操作,那么最好把这些操作放在单独的函数或者类中,以便于管理和调试。

    以上就是解决这个问题的一些方法,具体选择哪种方法取决于你的具体情况和需求。

    评论

报告相同问题?