C 循环“输入学生id:”语句
如果我重新键入我的学生id,即7位数字,我希望转到下一个语句,但它不断重复相同的问题C 循环“输入学生id:”语句,c,C,如果我重新键入我的学生id,即7位数字,我希望转到下一个语句,但它不断重复相同的问题 如何修复此问题?您的代码有许多问题 ifcount1=7将值7赋给变量count1,以便使用ifcount1=7进行比较。 每次用户输入id时,您都需要检查其长度,而不仅仅是第一次。您可以使用某种循环和条件。如果满足该条件,即学生id长度为7或8位,则中断循环并继续。 每次用户输入一个新数字时,您都需要重置count1,否则您将继续无限增加它。 例如,您可以这样做: #include <stdio.h&g
如何修复此问题?您的代码有许多问题 ifcount1=7将值7赋给变量count1,以便使用ifcount1=7进行比较。 每次用户输入id时,您都需要检查其长度,而不仅仅是第一次。您可以使用某种循环和条件。如果满足该条件,即学生id长度为7或8位,则中断循环并继续。 每次用户输入一个新数字时,您都需要重置count1,否则您将继续无限增加它。 例如,您可以这样做:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int id = 0;
int pin = 0;
int count1 = 0;
int count2 = 0;
printf("enter student id: ");
scanf("%i",&id);
while(id !=0)
{
id /= 10;
count1++;
}
while(count1 != 7)
{
printf("the student id should be in 7 or 8 digits\n");
printf("enter student id: ");
scanf("%i",&id);
}
if(count1 = 7)
{
printf("enter student pin: ");
scanf("%i",&pin);
}
return 0;
}
因为如果count1=7,那么7被分配给count1,条件被计算为真值,因为在c中,任何非零条件都是真的
为了防止出现这种情况,您可能希望启用编译器警告,如果它们处于启用状态,编译器会告诉您向用作真值的赋值添加显式括号
虽然它仍然跳过了scanf的返回值,这可能会调用未定义的行为,这确实解决了您的问题,但我有一个建议给您
如果要检查扫描了多少位数字,可以使用%n说明符,如下所示
#include <stdio.h>
#include <stdlib.h>
int main()
{
int id = 0;
int pin = 0;
int count1 = 0;
for(;;)
{
printf("enter student id: ");
scanf("%i",&id);
while(id !=0) {
id /= 10;
count1++;
}
if (count1 != 7 && count1 != 8) {
printf("the student id should be in 7 or 8 digits\n");
count1 = 0;
}
else break;
}
printf("enter student pin: ");
scanf("%i",&pin);
return 0;
}
您只需要非常仔细地阅读就可以理解这一点,还需要学习如何根据scanf的返回值验证输入。ifcount1=7不是有效的语句,请将其更正为ifcount1==7,并且count1不会在while循环中修改,而count1会在count1时继续运行!=7:这是一个无限循环。。。。如果count1==7是不必要的,那么下面的内容将被更正。我很高兴你没有建议yoda条件。
int
main(void)
{
int value;
int count;
value = 0; /* initialized in case no valid characters are scanned */
count = 0; /* initialized in case no valid characters are scanned */
if ((scanf("%d%n", &value, &count) == 1) && (count == 7))
fprintf(stderr, "ok, value is `%d'\n", value);
else
fprintf(stderr, "wrong length: %d\n", count);
return 0;
}