我想知道如何改进此函数来控制输入和输入显示,以便仅使用 getchar 函数中的第一个字符 避免用户可能键入的其余内容。当用户键入多个字符时, printf 会打印多次。如何纠正这个缺陷?
int checkLevelValidity(int levelOne, int levelTwo) {
int level = 0; //initialize to value zero (false)
printf("Choose difficulty level: press (1) for single digit
or (2) for double: ");
//get user input when level value is zero at start
while ( level == 0 ) {
scanf("%d", &level);
//if input is not an integer (false on return from scanf)
if ( level == 0 ) {
printf("Enter (%d or %d): ", levelOne, levelTwo);
getchar();
}
//if input is integer then check for correct level value
//if input less than (1) or larger than (2)
if ( ( level != 0 ) &&
( level < levelOne || level > levelTwo ) ) {
printf("Enter correct level (%d or %d): ",
levelOne, levelTwo);
//reassign zero value to loop again
level = 0;
}
}
return level; //returns correct value of (1) or (2)
}
最佳答案
用途:
// Loop as long as there is an error in reading
// the level or the value of level is not right.
while ( ( scanf("%d", &level) != 1 ) ||
( level != levelOne ) ||
( level != levelTwo )
{
if (feof(stdin))
{
// Deal with EOF
}
// Ignore the rest of the line up to the newline.
scanf("%*[^\n]");
printf("Enter (%d or %d): ", levelOne, levelTwo);
}
关于c - 使用 getchar 使用循环 c 代码丢弃除第一个字符之外的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217940/