fgets从C中的输入(键盘)获取“字符串”

时间:2015-10-12 14:15:52

标签: c fgets

在我的程序中没有使用scanf,我用fgets替换它,但是我遇到了一些问题。 我的范围:有一个函数将char *返回到“string”,但如果在第一个字符中是“\ n”或“”(空格),它将打印错误,并重复输入。

我写了这个:

#define DIM_INPUT 20
char buffer[DIM_INPUT]; 

char* readFromInput(){
size_t length = 0;
int cycle = 1;
if(length < 3){
    while(cycle){
        fgets(buffer,DIM_INPUT,stdin);
        length = strlen(buffer);
        char first = buffer[0];
        char* c = &first;
        if(strcmp(c,"\n") == 0){
            printf("Error,repeat\n");
            cycle = 1;
        }
        else if(strcmp(c," ") == 0){
            printf("Error,repeat\n");
            cycle = 1;
        }
        else
            return c;
    }
}
else{
    if(buffer[length-1] == '\n'){
        buffer[length-1] = 0;
    }
    char* input = malloc(sizeof(char)*length);
    strcpy(input,buffer);
    if(strlen(buffer)==DIM_INPUT-1) //
        CLEAN_STDIN;
    memset(buffer,'\0',sizeof(buffer)); 
    return input;
}

}

而CLEAN_STDIN是一个消耗额外字符的宏:

{ int ch;while((ch = fgetc(stdin))!='\n'  && ch != EOF  );}

问题是当使用它时有一些奇怪的问题,特别是当我输入一个输入字符时。 感谢

1 个答案:

答案 0 :(得分:1)

if(strcmp(c,"\n") == 0){

未定义的行为。尝试:

if(c == '\n'){

同样适用于它的第二个实例。