我已经得到了我的程序的部分回应用户输入工作,但我的代码似乎忽略了while行,我指定不回显数组中的字符,如果它们是空格或标点符号。我的代码如下:
#include <stdio.h>
int main()
{
int word = 0, punct = 0;
int i = 0;
char phrase[500];
printf("Enter any phrase.");
while (1)
{
do
{
phrase[i] = getchar(); //gets incoming char and outputs it
putchar(phrase[i]);
} while (phrase[i] != ' ' && phrase[i] != '.' && phrase[i] != '!' && phrase[i] != '@' && phrase[i] != '#' && phrase[i] != '$' && phrase[i] != '%' && phrase[i] != '%' && phrase[i] != '^' && phrase[i] != '&' && phrase[i] != '*' && phrase[i] != '(' && phrase[i] != ')' && phrase[i] != '-' && phrase[i] != '_' && phrase[i] != '=' && phrase[i] != '+' && phrase[i] != '\\' && phrase[i] != '|' && phrase[i] != '{' && phrase[i] != '}' && phrase[i] != '[' && phrase[i] != ']' && phrase[i] != ':' && phrase[i] != ';' && phrase[i] != '\'' && phrase[i] != '\"' && phrase[i] != '<' && phrase[i] != '>' && phrase[i] != ',' && phrase[i] != '?' && phrase[i] != '/'); //prevents punctuation and spaces from bein outputted
printf("\n");
i++;
}
}
当我运行程序时,用户输入全部被回显,包括标点符号和空格,究竟是什么错误以及如何使代码输出char的所有字符并跳过标点符号和空格?如果跳过标点符号,我将如何保持循环?
答案 0 :(得分:2)
//gets incoming char and outputs it
这条评论说明了一切。您的do
循环在while
测试检查之前输出字符。 while
仅在输入字符是标点符号时停止,但到那时该字符已被发送。然后外部while (1)
循环会导致整个事情再次发生。
解决问题的方法是在将字符发送到输出之前测试字符。例如:
while(1) {
phrase[i] = getchar();
if (isPunctuation(phrase[i]) == false) {
putchar(phrase[i]);
}
else {
printf("\n");
i++;
}
}
请注意,您 在第500个字符之后,您将超过while (1)
数组的容量并开始写入不属于您的内存。我会留给你思考一个更合理的循环条件。