如何确保输入的值是一个数字?

时间:2014-02-13 20:39:21

标签: c loops math

我正在为我的一个课程编写代码而且我已经碰壁了。我需要用户输入一个数字,该数字将用作for循环重复的次数。我要求这个数字的第一个循环是while循环。我需要确保输入的值是数字而不是字母或特殊字符。

我不知道如何确保它不是字母或特殊字符。

下一个问题是确保for循环仅运行指定次数,即第一个循环中提供的数字。

这是我到目前为止所写的内容。

#include <stdio.h>

int main()

{

int num_of_scores, n;
char enter;
float score=-1, total=0, average;

do
{
    printf("\n\nEnter the number of quiz scores between 1 and 13: ");
    scanf ("%d, %c", &num_of_scores, &enter);
}
while(num_of_scores<1 || num_of_scores>13/* && enter == '\n'*/);

printf("\nStill Going!");

for(n=0; n<num_of_scores; n++)
{
    printf("\nEnter score %i: ", n+1);
    scanf ("%f", &score);
    while(score>=0 || score<=100)
    {
        total = total + score;
        score = -1;
        break;
    }
}


average = total / num_of_scores;

printf("\nThe average score is %.0f.\n\n", average);
return 0;

}

所以我编写了一些代码。第一个while循环中有一个部分位于注释中,我将其删除,因为它使程序在该循环之后结束。 printf(“仍在继续”)只是一个测试,以确保程序得到那么远。还有什么指示?我仍然不确定如何检查确保没有输入数字。我虽然加了&amp;&amp;输入=='\ n'会这样做,但是如果它挂起程序就不行了。您建议的许多示例都很好,但我发现它们有点令人困惑。谢谢!

3 个答案:

答案 0 :(得分:1)

检查scanf的返回值。根据手册页:

  

返回值

     

这些函数返回成功匹配和分配的输入项数,可以少于提供的数   在早期匹配失败的情况下,甚至为零。

     

如果在第一次成功转换或匹配之前到达输入结尾,则返回值EOF   失败发生。如果发生读取错误,也会返回EOF,在这种情况下,流的错误指示符(请参阅   ferror(3))已设置,并且设置了errno表示错误。

答案 1 :(得分:1)

我会检查Check if input is integer type in C以获得答案......

答案 2 :(得分:0)

do{
    char ch = 0;
    num_of_scores = 0;
    printf("\nEnter the number of quiz scores between 1 and 13: ");
    if(scanf("%d%c", &num_of_scores, &ch)!=2 || ch != '\n'){
        int ch;
        while((ch=getchar())!='\n' && ch !=EOF);
    }
} while(num_of_scores<1 || num_of_scores>13);