我的程序中已经有了响应用户输入的部分,但是我的代码似乎忽略了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/

10-12 15:34