如何使用 fgets 在 c 中从 stdin 读取多个输入
how can I read multiple inputs from stdin in c using fgets
我尝试了这段代码并编写了另一个类似的代码来读取另一个输入但是程序第二次读取了第一个标准输入和第二个标准输入(我也使用了 fflush(stdin) 而不是 fseek() 但是也没用)
int BUFFERSIZE=100;
char input[BUFFERSIZE];
char *final=malloc(1);
while(fgets(input,BUFFERSIZE-1,stdin))
{
final=realloc(final,strlen(final)+strlen(input)+1);
strcat(final,input);
if(input[strlen(input)-1]=='\n') break;
}
sscanf(final,"%d",&opt);
free(final);
fseek(stdin,0,SEEK_END);
您没有在循环之前初始化 final
缓冲区的内容。所以第一个 strlen(final)
和 strcat(final, input)
正在读取一个未初始化的字符串,导致未定义的行为。
int BUFFERSIZE=100;
char input[BUFFERSIZE];
char *final=malloc(1);
*final = 0; // initialize to empty string
while(fgets(input,BUFFERSIZE-1,stdin))
{
final=realloc(final,strlen(final)+strlen(input)+1);
strcat(final,input);
if(input[strlen(input)-1]=='\n') break;
}
sscanf(final,"%d",&opt);
free(final);
我尝试了这段代码并编写了另一个类似的代码来读取另一个输入但是程序第二次读取了第一个标准输入和第二个标准输入(我也使用了 fflush(stdin) 而不是 fseek() 但是也没用)
int BUFFERSIZE=100;
char input[BUFFERSIZE];
char *final=malloc(1);
while(fgets(input,BUFFERSIZE-1,stdin))
{
final=realloc(final,strlen(final)+strlen(input)+1);
strcat(final,input);
if(input[strlen(input)-1]=='\n') break;
}
sscanf(final,"%d",&opt);
free(final);
fseek(stdin,0,SEEK_END);
您没有在循环之前初始化 final
缓冲区的内容。所以第一个 strlen(final)
和 strcat(final, input)
正在读取一个未初始化的字符串,导致未定义的行为。
int BUFFERSIZE=100;
char input[BUFFERSIZE];
char *final=malloc(1);
*final = 0; // initialize to empty string
while(fgets(input,BUFFERSIZE-1,stdin))
{
final=realloc(final,strlen(final)+strlen(input)+1);
strcat(final,input);
if(input[strlen(input)-1]=='\n') break;
}
sscanf(final,"%d",&opt);
free(final);