循环“输入student id:”语句

时间:2015-09-21 16:56:02

标签: c

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

如果我重新输入我的学生ID,这是7位数,我希望转到下一个声明,但它不断重复同样的问题。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的代码存在许多问题。

  1. if(count1 = 7)将值7分配给变量count1,以便使用if(count1 == 7)进行比较。
  2. 每次用户输入ID时,您需要检查其长度,而不仅仅是第一次。你可以使用某种循环和条件。如果满足该条件(即学生ID长度为7或8位),则打破循环并继续。
  3. 每次用户输入新号码时,您都需要重置count1,否则您将无限期地继续增加号码。
  4. 例如,你可以这样做:

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

答案 1 :(得分:1)

由于您有if (count1 = 7)7已分配给count1且条件被评估为真值,因为在c中任何非零条件都为真。

为防止出现这种情况,您可能需要启用编译器警告,如果它们在编译器上,则会告诉您将明确的括号添加到用作真值的赋值中。

This answer虽然它仍然跳过scanf()的返回值,这可能会调用未定义的行为,但确实可以解决您的问题,但我已经为您提出了建议。

如果要查看扫描的位数,可以使用"%n"说明符,如下所示

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

您只需阅读scanf()'s manual page 非常谨慎来解决这个问题,并了解如何根据scanf()的返回值验证输入。