c int comparrison for finish loop

时间:2015-07-08 06:05:29

标签: c int do-while

我有以下函数,其中包含do while循环:

void GetFiveNumericValues()
{
    int validationResult;
    char input[5];
    do
    {
        printf("Please enter 5 digits:\n");
        validationResult = scanf("%s", &input);

        printf("Validation result: %d\n", validationResult);
    } while (validationResult != 1);
    // while (!(validationResult == 1));
    // while (validationResult > 1 || validationResult < 1);
}

即使validationResult == 1,循环也没有完成 my image 我在这里缺少什么?

2 个答案:

答案 0 :(得分:6)

input[]太小而无法容纳5个字符的字符串,因为除了5个输入字符外,它还需要保留终止'\0'。如果您实际输入5个字符,则会出现缓冲区溢出和未定义的行为。至少改为:

char input[6];

此外行:

validationResult = scanf("%s", &input);

应该是:

validationResult = scanf("%s", input);

因为input已经有效地成为指针。

或者更好:

validationResult = scanf("%5s", input);

即使输入无效,也可以防止缓冲区溢出。

答案 1 :(得分:0)

int validationResult;
unsigned input[5];
do
{
    printf("Please enter 5 digits:\n");
    validationResult = scanf("%1u%1u%1u%1u%1u", input, input+1, input+2, input+3, input+4);
    printf("Validation result: %d\n", validationResult);
    if(validationResult != 5){
        while(getchar()!='\n');
    }
} while (validationResult != 5);