用scanf只读第一个字符

时间:2019-03-24 03:24:00

标签: c

我试图使用scanf仅读取每行的第一个字符。

使用此输入:

  

c文件:myciel3.col

     

c消息来源:Michael Trick(trick@cmu.edu)

      c描述:基于Mycielski变换的图。

     

c不含三角形(编号2),但不断增加

     

c色号

     

p边缘11 20

对不起,我的英语不好。

int main(int argc, char *argv[]) {
    char option;
    int countC = 0;
    int countP = 0;
    while(scanf("%c",&option) != EOF) {
        if(option == 'c') countC++;
        else if (option == 'p') countP++;
    }
    printf("c: %d\tp: %d\n",countC, countP);
    return (0);
}

我希望输出为C:5和P:1,但实际输出为c:15 p:2

1 个答案:

答案 0 :(得分:2)

您的代码读取输入中的每个字符,而不是每行的第一个字符。

使用fgets或任何其他获得行的功能。

#include <stdio.h>

int main(int argc, char *argv[]) {
    char option[255];
    int countC = 0;
    int countP = 0;
    while(fgets(option, 255, stdin) != NULL) {
        if(option[0] == 'c') countC++;
        else if (option[0] == 'p') countP++;
    }
    printf("c: %d\tp: %d\n",countC, countP);
    return (0);
}