scanf()读取一个减号并且不会将其放回去

时间:2012-05-10 07:45:10

标签: c command-line input scanf

我试图从命令行读取非负数或减号,如果输入不是程序终止之一,那么我做了以下内容:

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()来阅读输入,然后检查它,但我不想这样做很麻烦。

1 个答案:

答案 0 :(得分:4)

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

只需使用fgets()sscanf()