c int比较完成循环

c int comparrison for finish loop

我有以下函数,里面有一个 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.
循环也没有结束 我在这里错过了什么?

input[] 太小,无法容纳 5 个字符的字符串,因为除了 5 个输入字符外,它还需要容纳终止符 '[=15=]'。如果您实际上输入了 5 个字符,那么您会遇到缓冲区溢出和未定义的行为。至少更改为:

char input[6];

此外这一行:

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

应该是:

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

因为 input 已经是一个有效的指针。

或者更好:

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

这也将防止缓冲区溢出,即使您的输入无效。

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