C中的多行输入 - 故障排除

时间:2016-02-11 22:41:50

标签: c string

我正在尝试在c中读取多行输入。我输入的第一个输入完全打印出来,但其余的都缺少第一个字符。

所以,如果输入的名称(字符串)是有效的标识符名称,我试图打印,并且我想在无限循环中获取输入。我知道这里已经发布了很多类似的问题,但是没有一个问题适合我。我不确定我在这里做错了什么。 :(

int main() {
        char str[1000];

        for(;;){
                //Below, I have tried every possibility that I can think of
                scanf("%[^\n]d%*c%*s", str);
                //fgets(str, 1000, stdin);
                printf("str[0]: %c\n", str[0]);

                //Flushing the Buffer    
                while ( (dump = getchar()) == '\n' && dump != EOF);
                //fflush(stdout);
        }
}

我正在整理我的代码,以防万一,

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
        char str[1000];
        int i, dump, check;

        for(;;){
                check = 0;
                scanf("%[^\n]d%*c%*s", str);
                //fgets(str, 1000, stdin);
                printf("str[0]: %c\n", str[0]);
                if ( (str[0] == '_') || ( isalpha(str[0]) ) ){
                        for (i = 1; i < strlen(str); i++) {
                                if (isalpha(str[i]) || isdigit(str[i])) {
                                        continue;
                                } else{
                                        printf("2Invalid\n");
                                        check = 1;
                                }
                        }
                        if (check != 1){
                                printf("String: %s\n", str);
                                printf("Valid\n");
                        }
                } else{
                        printf("Invalid\n");
                        break;
                }

                //Flushing the Buffer    
                while ( (dump = getchar()) == '\n' && dump != EOF);
                //fflush(stdout);
        }
}
  

输入:   asdasffa   的输出:   str [0]:a   字符串:asdasffa   有效

     

输入:   &安培; asdaf   的输出:   str [0]: (when str[0] is "&", not "a")   字符串:asdaf   有效

     

输入:   %ASDF   的输出:   str [0]: (when str[0] is "%", not "a")   字符串:asdf   有效

我猜我冲洗缓冲区的方式导致了这个问题?

谢谢!

1 个答案:

答案 0 :(得分:2)

while ( (dump = getchar()) == '\n' && dump != EOF);行 消耗一个角色。尝试在此之后添加对ungetc的调用,以便scanf可以看到它。并删除多余的dump != EOF。如果dump == \n,那么它将不是EOF。