计算在不使用字符串的情况下键入字符的次数

时间:2016-07-24 06:01:13

标签: c

我正试图找到一种方法来计算用户在不使用字符串的情况下键入字母'c'(大写或小写)的次数。某些用户输入(例如cvcc)会导致编程打印'c'仅输入2次。

#include <stdio.h>

int main()
{
    int counter = 0;

    printf("Enter a string:");

    do
    {
        if ((getchar() == 'c') || (getchar() == 'C'))
        {
             counter++;
        }
    } while (getchar() != '\n');

    printf("The letter c was entered %d times\n", counter);

    return 0;
}

3 个答案:

答案 0 :(得分:4)

if ((getchar() == 'c') || (getchar() == 'C'))

如果第一个不是'c',您正在阅读两个不同的字符。阅读该角色一次,然后与两个角色进行比较。

 int input = getchar();
 if (input == 'c' || input == 'C')
 {
     //do something
 }

总是担心EOF。请注意,getchar()会返回int,而不是char

 do
{
    int input=getchar();
    if ((input == 'c') || (input == 'C'))
    {
         counter++;
    }
} while (input != '\n');

答案 1 :(得分:0)

不要在while循环中使用输入变量,而是使用以下逻辑。

#include<stdio.h>
int main(void)
{
int counter=0;
while(1)
{
    int input=getchar();
    if(input=='c'|| input=='C')counter++;
    else if(input=='\n')break;
}
printf("%d",counter);
}   

您将获得所需的输出。

答案 2 :(得分:0)

#include <stdio.h>

int main()
{
    int counter = 0;
    int ch;

    printf("Enter a string: ");

    while ((ch = getchar()) != EOF && ch != '\n') {
        if (ch == 'c' || ch == 'C')
            counter++;
    }

    printf("The letter c was entered %d times.\n", counter);
    return 0;
}

主要变化是getchar每次迭代只调用一次并保存在变量中。之后,您可以根据需要随时访问变量值,而不会产生任何副作用。多次调用getchar每次都会读取一个新字符。

我还添加了对EOF的检查,以防用户按下Ctrl+DCtrl+Z,从而完成输入。你的原始程序最终会无限循环。