【问题标题】:scanf() reads a minus sign and doesn't put it backscanf() 读取一个减号并且不把它放回去
【发布时间】:2012-05-18 18:16:51
【问题描述】:

我正在尝试从命令行读取非负数或减号,如果输入不是其中之一,程序将终止,因此我执行了以下操作:

while((scanf("%d", &n)==1 && n>-1 && (input=1)) || (scanf("%c", &delete)==1 && delete=='-' && (input=2)))

input 是一个整数,表示读取的是数字还是减号(循环中的input=1input=2 是有意的)。

现在,该程序适用于数字,但如果我输入一个减号,第一个 scanf() 会读取它,但不会明显地将其放回原处,因此第二个 scanf() 什么也没找到并终止程序。

但是,如果我输入 --(两个减号),第一个 scanf() 读取一个,第二个 scanf() 读取另一个,一切正常。

命令行的输入不能改变,它必须是一个减号。解决这个问题的最佳方法是什么?

请注意,我知道如何使用 getchar() 读取输入然后检查它,但我不想这样做很麻烦。

【问题讨论】:

  • 那是一些非常讨厌的代码......

标签: c command-line input scanf


【解决方案1】:

最好的方法是将整行文本读入缓冲区,然后然后检查缓冲区的内容,而不是依赖依赖于推回的脆弱的读取链。

只需使用fgets()sscanf()

【讨论】:

  • 嗯,我从来没有真正使用过这些!但是在阅读了它们之后,我想我将来会对这些感到更舒服。我更改了代码,现在一切正常。有没有什么特殊情况你会推荐 scanf() 而不是这些?
  • @MinaHany 除了总的一次性代码,我不这么认为,不。 :)
  • 非常感谢您的帮助!祝你有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2014-09-01
相关资源
最近更新 更多