如何只接受C中的字符输入?

时间:2017-03-17 08:50:33

标签: c arrays

此程序只计算您在程序中输入的单词中的元音。但我希望这个程序只接受字符而不是数字。有办法吗?

#include <stdio.h>
#define MAX 50

int countVowel(char[]);

void main()
{
    char text[MAX];
    int cVowel, sum;
    printf("Enter text : ");
    scanf("%s", text);
    cVowel = countVowel(text);
    printf("Text : [%s] has %d vowels", text, cVowel);

}

int countVowel(char t[])
{
    int i = 0, count = 0;
    while (i < MAX && t[i] != '\0')
    {
        if (t[i] == 'A' || t[i] == 'a' || t[i] == 'E' || t[i] == 'e'
                || t[i] == 'I' || t[i] == 'i' || t[i] == 'O' || t[i] == 'o'
                || t[i] == 'u' || t[i] == 'U')

            count++;
        i++;

    }
    return (count);

}

我尝试过使用atoi但它没有工作:/

2 个答案:

答案 0 :(得分:1)

您可以使用strpbrk

  

返回指向任何一个str1中第一个匹配项的指针   作为str2一部分的字符,如果没有则为空指针   匹配。

int main(void) /* void main is not a valid signature */
{
    char text[MAX];
    int cVowel, sum;

    while (1) {
        printf("Enter text : ");
        scanf("%s", text);
        if (strpbrk(text, "0123456789") == NULL) {
            break;
        }
    }
    ...
}

答案 1 :(得分:1)

@Keine Lust的答案是正确的,如果你想忽略整个字符串,如果它包含数字字符。

如果你只是想忽略它们,那么在迭代你的字符串时,检查当前字符是>= 48还是<= 57(根据ASCII character table]。如果那个条件是是的,然后只是continue;迭代。