循环在 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' )
{
//...
}
在我的问题中遇到了一种情况,我必须输入多个字符串作为输入。 现在,我的逻辑是创建一个二维数组,其中(示例)
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' )
{
//...
}