我有以下函数,其中包含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
,循环也没有完成
我在这里缺少什么?
答案 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);