2012-05-10 53 views
0

我试图从命令行读取一个非负数或减号,如果输入不是其中一个程序终止,所以我做了以下内容:scanf()读取减号并不放回

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

input是一个整数,并指示将其读数字或减号(在循环input=1 & input=2意)。

现在,该方案适用于数字,但是如果我输入一个减号第一scanf()读它,但不把它放回去apparantly,所以第二scanf()觉得没有什么和终止程序。

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

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

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

+2

这是一些很肮脏的代码,你有... –

回答

4

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

只需使用fgets()sscanf()

+0

嗯,我从来没有实际使用这些!但是在阅读完它们之后,我想我会在未来更加适应这些。我改变了我的代码,现在一切正常。 有没有特定的情况下,你会推荐scanf()而不是这些? – MinaHany

+2

@MinaHany除了完全丢弃代码之外,我不这么认为,不。 :) – unwind

+0

非常感谢您的帮助! 祝你有美好的一天:) – MinaHany