1

如何在一个循环中读取多个字符串,每个字符串的长度都是以前未知的?我尝试了以下但它没有按预期工作。

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",&j) 然后按 enter 进行此 scanf 将使我的第一个字符串为空

4

1 回答 1

2

在以问题中的方式读取字符串之前,您使用 egscanf的问题是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);
    
于 2013-07-03T09:32:37.497 回答