C 循环“输入学生id:”语句

C 循环“输入学生id:”语句,c,C,如果我重新键入我的学生id,即7位数字,我希望转到下一个语句,但它不断重复相同的问题 如何修复此问题?您的代码有许多问题 ifcount1=7将值7赋给变量count1,以便使用ifcount1=7进行比较。 每次用户输入id时,您都需要检查其长度,而不仅仅是第一次。您可以使用某种循环和条件。如果满足该条件,即学生id长度为7或8位,则中断循环并继续。 每次用户输入一个新数字时,您都需要重置count1,否则您将继续无限增加它。 例如,您可以这样做: #include <stdio.h&g

如果我重新键入我的学生id,即7位数字,我希望转到下一个语句,但它不断重复相同的问题


如何修复此问题?

您的代码有许多问题

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;
}