如何回显用户输入并跳过标点符号和空格? (语言C)

时间:2015-02-25 23:18:41

标签: c loops echo

我已经得到了我的程序的部分回应用户输入工作,但我的代码似乎忽略了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的所有字符并跳过标点符号和空格?如果跳过标点符号,我将如何保持循环?

1 个答案:

答案 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)数组的容量并开始写入不属于您的内存。我会留给你思考一个更合理的循环条件。