在这个程序中,我试图将用户输入的每个字符保存到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;
答案 0 :(得分:7)
(user_input != '.') || (user_input != '?') || (user_input != '!')
上述内容并未评估您的想法。如果条件为false(以及要停止的循环),则所有三个子句都必须为false。这意味着所有相应的反转都必须为真,即:
(user_input == '.') && (user_input == '?') && (user_input == '!')
这当然是不可能的。单个字符变量一次不能包含三个不同的值。
我假设您希望循环终止,如果程序接收到这些字符中的任何一个作为输入,那么您需要检查输入是否同意,这意味着:
(user_input != '.') && (user_input != '?') && (user_input != '!')