do while循环不以C结尾

时间:2017-03-06 21:11:03

标签: c

在这个程序中,我试图将用户输入的每个字符保存到do while循环中,该循环应该计算空格,新行和制表符的数量。

当我运行我的程序时,它不会在'。','!'或'?'

结束时结束

为什么?

int characters, spaces, new_lines, tabs;
int user_input;

printf("Enter a sentence (end by '.' or '?' or '!'):");



do{
user_input = getchar();
 if (user_input == ' ')
    spaces++;
 if (user_input == '\t')
    tabs++;
 if (user_input == '\n')
    new_lines++;

} while((user_input != '.') || (user_input != '?') || (user_input != '!'));

 printf("Number of space characters: %d", spaces);
 printf("Number of new line characters: %d", new_lines);
 printf("Number of tabs: %d", tabs);

 return 0;

1 个答案:

答案 0 :(得分:7)

(user_input != '.') || (user_input != '?') || (user_input != '!')

上述内容并未评估您的想法。如果条件为false(以及要停止的循环),则所有三个子句都必须为false。这意味着所有相应的反转都必须为真,即:

(user_input == '.') && (user_input == '?') && (user_input == '!')

这当然是不可能的。单个字符变量一次不能包含三个不同的值。

我假设您希望循环终止,如果程序接收到这些字符中的任何一个作为输入,那么您需要检查输入是否同意,这意味着:

(user_input != '.') && (user_input != '?') && (user_input != '!')