同时在C中循环具有多个条件

时间:2015-07-09 22:41:37

标签: c while-loop getchar

我正在尝试读取必须为'C'或'n'的字符。
如果不是,则打印错误并要求另一个字符。

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int c;
    printf("Enter the character: ");

    c = getchar();

    while (!(c=='C' && c=='n')){
            printf("Wrong!.\n");
            printf("Enter the character: ");
            c = getchar();  
    }

    printf("\n");
    return 0;
}

我得到的是:

  

输入字符:s
  错!
  输入字符:错误!
  输入字符:

就像它在while循环中检查两次一样。

2 个答案:

答案 0 :(得分:3)

两件事:

1)您正在按一个角色,然后按Enter键。那是两个角色。如果您想阅读整行,请不要使用getchar

2)你的条件毫无意义。永远不会c等同于'C'并且相当于'n',因此您正在测试不可能的内容。你的循环永远不会结束。

答案 1 :(得分:1)

getchar()用于逐字符输入控制。你仍然可以使用getchar(),但你必须处理键盘上的所有字符。你可以忽略你不关心的角色来做到这一点。

我也会重构你的循环做一个do-while循环而不是while循环

要修改代码以捕获大写和小写A-Z,您可以执行以下操作:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int c;
    printf("Enter the character: ");

    do {
        c = getchar(); 

        // ignore non a-z or non A-Z
        if( c < 'A' || ( c >'Z' && c < 'a' ) || c > 'z' ) {
            continue;
        }

        // look for the characters you care about
        if( c=='C' || c=='n') {
             break;
        }

        // now we only have incorrect characters that are 
        // only upper or lower case

        printf("%c Wrong!\n", (char)c );
        printf("Enter the character: ");

    } while (1);

    printf("\n");
    return 0;
}

虽然我没有测试过这个......你应该得到类似的东西:

  

输入字符:s错误!

     

输入字符:t错误!

     

输入字符:C

输入“s - = + t \ n01234C”时。

注意:'\ n'我用来表示从键盘输入的回车