在我的程序中没有使用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 );}
问题是当使用它时有一些奇怪的问题,特别是当我输入一个输入字符时。 感谢
答案 0 :(得分:1)
if(strcmp(c,"\n") == 0){
未定义的行为。尝试:
if(c == '\n'){
同样适用于它的第二个实例。