c int comparrison for finish loop

Yoa*_*oav 0 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);
}
Run Code Online (Sandbox Code Playgroud)

即使在时,循环也没有完成validationResult == 1.
我的形象 我在这里错过了什么?

Pau*_*l R 6

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

char input[6];
Run Code Online (Sandbox Code Playgroud)

此外这一行:

validationResult = scanf("%s", &input);
Run Code Online (Sandbox Code Playgroud)

应该:

validationResult = scanf("%s", input);
Run Code Online (Sandbox Code Playgroud)

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

或者更好的是:

validationResult = scanf("%5s", input);
Run Code Online (Sandbox Code Playgroud)

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