我的程序中已经有了响应用户输入的部分,但是我的代码似乎忽略了while行,在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++;
}
}
当我运行这个程序时,用户输入的所有内容都会被回显,包括标点符号和空格,到底是什么地方出了问题,我该怎么做才能使代码一个字符一个字符地输出所有内容,并跳过标点符号和空格?在跳过标点符号之后,如何保持循环?
最佳答案
//gets incoming char and outputs it
这句话说明了一切。do
循环在while
测试检查字符之前输出该字符。只有当输入字符是标点符号时,while
才会停止,但此时该字符已被发送。然后外部循环导致整个事件再次发生。
解决此问题的方法是在将字符发送到输出之前对其进行测试。例如:
while(1) {
phrase[i] = getchar();
if (isPunctuation(phrase[i]) == false) {
putchar(phrase[i]);
}
else {
printf("\n");
i++;
}
}
注意,您并不真正需要
while (1)
,因为这意味着循环将永远持续下去。在第500个字符之后,您将超过while (1)
数组的容量,并开始写入不属于您的内存。我把它留给你考虑一个更合理的循环条件。关于c - 如何回应用户输入并跳过标点和空格? (语言C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28731612/