我试图从命令行读取非负数或减号,如果输入不是程序终止之一,那么我做了以下内容:
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()
来阅读输入,然后检查它,但我不想这样做很麻烦。
答案 0 :(得分:4)
最好的方法是将整行文本读入缓冲区,然后检查缓冲区的内容,而不是依赖于依赖于后推的脆弱读取链。
只需使用fgets()
和sscanf()
。