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);
我有以下函数,里面有一个 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);