如何在循环中读取多个字符串,每个字符串的长度以前都不知道?我尝试了以下但它没有按预期工作。
int main()
{
int j, i = 0;
char c;
char *buf = malloc(20);
size = 20;
for(j = 0; j < 10; j++)
{
i = 0;
while(1)
{
if(i == size)
{
buf = realloc(buf,size+10);
size += 10;
}
char c = getchar();
if(c == '\n')
break;
buf[i] = c;
i++;
}
buf[i] = '\0';
printf("%s\n", buf);
}
}
仅当我将这些字符串作为输入时才有效。但是说我在获取字符串输入之前有一个scanf(“%d”,&amp; j)然后按下这个scanf的输入将使我的第一个字符串为空
答案 0 :(得分:2)
您使用的问题,例如在您按照问题的方式阅读字符串之前,scanf
是scanf
调用在输入缓冲区中留下换行符。因此,getchar
提取的第一个字符是此换行符,导致您的第一行为空。
您可以通过以下几种方式解决此问题:
告诉scanf
使用
scanf("%d ", &i);
注意格式代码后面的空格。
手动跳过空格:
int c;
while ((c = fgetc(stdin)) != EOF && isspace(c))
;
/* `c` is now a non-space character or EOF, put it back if it's not EOF */
if (c != EOF)
ungetc(c, stdin);