2011-11-23 161 views
0

如何简单而正确地检查用户是否输入数字而不是C语言中的字符或字符串?我试图写一些循环包含:C - 如何检查输入的数字

if (scanf("%d",&number)=1) 

但他们从来没有工作或结束。当输入一个数字时循环应该结束。

+3

我不认为这样的东西应该编译。 – MByD

+0

一些示例代码将帮助 –

+0

@user:提高编译器的警告级别,**介意警告** – pmg

回答

4

应该

if (scanf("%d", &number) == 1) // Notice the two ='s, not just one 

=是赋值运算符,双==是平等的测试。

+2

但scanf不是左值,它不应该是可分配的。 – MByD

+0

@MBYD是的我知道,但这是他所说的他使用的,所以这是我必须继续的信息。也许他的编译器非常糟糕。我只是没有时间在所有事情上进行猜测。 –

+0

这不太可能是编译器故障。无论如何,这不是批评,只是想知道。 – MByD

1

我想你想要这样的:

for (scanf(" %d", &number); (number < -100 || number > 100); scanf(" %d", &number)) { 
    printf("you didn't enter a valid number, try again >"); 
} 
+0

好吧,请记住'isdigit'带有一个字符,并告诉你该字符是否是字符'0'到'9'中的一个字符。 –

+0

是的,这有助于了解上下文。但是我们也不知道他不想要大于9或小于1的数字,所以测试'number> = 1 && number <= 9'可能不太好。你真的几乎必须检查'scanf'的返回值来做到这一点。 –

+0

上下文并不重要。我只有几个程序需要验证,如果输入的值是一个数字(不只是一个数字)。例如,数字可以从-100到100.如果用户输入一个字母或其他东西,那么应该显示一条消息,表示输入的值不正确,用户必须再次输入该值。这应该继续,直到输入一个数字。 –

0

这是否适合您的上下文:

char ch;int g; 
for(ch=getc(stdin);isalpha(ch);ch=getc(stdin)) 
{ 
printf("\nenter numbers only"); 
while(isalpha(getc(stdin))){} 
} 
ungetc(ch,stdin); 
scanf("%d",&g); 
printf("number entered %d",g); 
1

你行应该仅仅是: if (scanf("%d",&number)){

如果输入比其他一些东西,它将导致:if(0){,而不是if(1){