【问题标题】:problems with scanf("%d\n",&i) [duplicate]scanf("%d\n",&i) 的问题 [重复]
【发布时间】:2012-03-19 22:43:07
【问题描述】:

对于此代码:

int i;
scanf("%d\n",&i);

在我输入两个数字之前,我无法停止我的程序。

我觉得很奇怪,我知道什么时候输入合适,scanf会返回1。 当我输入“12a 'Enter'”、“12 'Enter'2”等时,没关系,i = 12,似乎当我输入不同的int或输入'Enter'和另一个时, scanf 返回 1。

我错过了什么?

【问题讨论】:

  • 尝试重新表述和重新格式化您的问题。
  • 我还添加了c++ 标签,因为这两种语言的行为相同
  • @LihO 虽然scanfc++ 中可用,但使用istreams 会更合适。也许问题应该保留为c

标签: c++ c format scanf formatted-input


【解决方案1】:

“当我使用scanf("%d\n",&i);时,我必须在输入两个数字后才能停止我的程序”
虽然这种格式使scanf 读取数字并将其存储到i,但这种“读取”仍在继续,直到找到非空白字符后跟\n。这就是输入1 2 使scanf 停止的原因。

在这种情况下,您不应在输入格式中指定换行符。 请改用scanf("%d",&i);

【讨论】:

  • 谢谢,我从来不这样做,我只是想知道原因。
【解决方案2】:

这是因为扫描文件中的'\n... 如果你想换行,只需输入:

printf ("\n");

它会给你一个空行...

【讨论】:

    【解决方案3】:

    scanf("%d\n",&i);

    读取数字直到出现非空白字符(忽略数字后的所有空格和'\n')。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多