带有“if”的while循环无法正常工作

Posted

技术标签:

【中文标题】带有“if”的while循环无法正常工作【英文标题】:While loop with "if" doesn't work properly 【发布时间】:2014-11-07 06:21:58 【问题描述】:

我浪费了好几个小时来思考为什么这个程序运行不正常,没有成功。它总是打印“字符是特殊符号”。

#include <stdio.h>
int main( void )

    char character;
    printf( "Please type any character and I will tell you what type it is:\n" );
while( 1 )
    
        scanf( "%c", &character);
        if( character >= 65 && character <= 90 )
            printf( "The character is A-Z\n" );
        else if( character >= 97 && character <= 122 )
            printf( "The character is a-z\n" );
        else if( character >= 48 && character <= 57 )
            printf( "The character is 0-9\n" );
        else if(( character >= 0 && character <= 47 ) ||
                ( character >= 58 && character <= 64 ) ||
                ( character >= 91 && character <= 96 ) ||
                ( character >= 123 && character <= 127 ))
            printf( "The character is a special symbol\n" );
    

运行示例

Please type any character and I will tell you what type it is:
4
The character is 0-9
The character is a special symbol

我注意到当我删除 while 循环时它不会发生,但我不明白为什么,我想要那个循环。

【问题讨论】:

不要使用带有字符的scanf,而是使用fgetc(stdin) 因为它的工作方式丑陋。 fgetc(stdin) 不受前导空白字符(如 \n)的影响。当然它仍然可以得到它们,但没有转换。 ***.com/questions/12063879/… 【参考方案1】:

你的scanf应该是这样的:

    scanf(" %c", &character);

您收到的是The character is a special symbol,因为scanf 也在阅读\n

【讨论】:

它必须在 % 之前有那个空格,它可以工作!但我不明白如何:/我应该如何谷歌它?我已经尝试过“[^\n]” @user3646717:% 之前的空格将跳过空格并读取下一个不是空格的字符。 "%d""%s""%f"" " 等都使用前导空白。 3 个例外:"%c""%[""%n" 非常感谢,我不知道那个领先的空白!【参考方案2】:

4 满足条件 printf("该字符是特殊符号\n");

【讨论】:

不不!它将打印The character is 0-9,因为 ASCII 值 4 介于 48 和 57 之间

以上是关于带有“if”的while循环无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

带有嵌套 if/else 语句的 While 循环

从 php While 循环中调用的 jQuery 脚本无法正常工作

带有嵌套 if 语句的 while 循环的 Big-O 运行时

事件内部功能无法正常工作

Java while循环查询[关闭]

带有while循环的Recvall在python中的两个设备之间不起作用