我正在为我的一个课程编写代码而且我已经碰壁了。我需要用户输入一个数字,该数字将用作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'会这样做,但是如果它挂起程序就不行了。您建议的许多示例都很好,但我发现它们有点令人困惑。谢谢!
答案 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);