循环在 C 中提前终止

loop terminating early in C

在我的问题中遇到了一种情况,我必须输入多个字符串作为输入。 现在,我的逻辑是创建一个二维数组,其中(示例)

Input:
ABD
okay

将存储为

[['A','b','D'],['o','k','a','y']]

理想情况下,它应该在我输入空字符串时终止。

但我的代码(下面)只接受第一个输入并终止。

    char str[100];
    char stringArray[50][100];
    int k,m,count=0,i=0,j=0;
    do {
        scanf("%[^\n]",&str);
        k=strlen(str);
        for(m=0;m<k;m++){
            stringArray[count][m]=str[m];
        }
        count++;
    }
    while (str[0] != '[=12=]');

对于初学者来说,调用 scanf 的第二个参数

scanf("%[^\n]",&str);

类型不正确 char ( * )[100] 而不是 char *

你需要写

scanf("%[^\n]",str);

然而,换行符 '\n' 在此调用后保留在输入缓冲区中。

至少你需要阅读它,例如

scanf( "%*c" );

尽管使用函数 fgets 代替 scanf 会更简单。

例如

fgets( str, sizeof( str ), stdin );

最好使用 while 循环而不是 do-while 循环。

例如

while ( fgets( str, sizeof( str ), stdin ) != NULL && str[0] != '\n' )
{
    //...
}