c - 使用 getchar 使用循环 c 代码丢弃除第一个字符之外的所有字符

标签 c

我想知道如何改进此函数来控制输入和输入显示,以便仅使用 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/

相关文章:

C 程序未打印 '@' 字符

c - 如何让我的 makefile 自动链接库?

c - 无法使用 ODBC 连接到 Oracle 10g 快捷版

c - MIPS 操作存储在数据中的数组

在 c 中将字符串分成 512 字节的 block

c - 使用线程的未知错误

c - PostgreSQL通知处理

c - 指针段错误

c++ - 防止 GCC 对结构 union 中的位域重新排序

c - Windows cygwin 上的 C 中的 Gui