0

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

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

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

现在,该程序适用于数字,但如果我输入一个减号,第一个scanf()读取它但没有将它明显放回去,所以第二个scanf()什么也没找到并终止程序。

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

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

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

4

1 回答 1

4

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

只需使用fgets()sscanf()

于 2012-05-10T08:06:37.193 回答