问题描述
遇到了我必须输入多个字符串作为输入的问题。 现在,我的逻辑是创建一个二维数组,其中(示例)
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] != '\0');
解决方法
对于初学者,scanf调用的第二个参数
scanf("%[^\n]",&str);
具有错误的类型char ( * )[100]
而不是char *
。
您需要写
scanf("%[^\n]",str);
但是,在此调用之后,换行符'\n'
仍保留在输入缓冲区中。
至少您需要阅读例如
scanf( "%*c" );
尽管使用函数fgets
代替scanf会更简单。
例如
fgets( str,sizeof( str ),stdin );
与使用do-while循环相比,使用while循环会更好。
例如
while ( fgets( str,stdin ) != NULL && str[0] != '\n' )
{
//...
}
,
这是更正的
do {
scanf(" %[^\n]",str);
k=strlen(str);
for(m=0;m<k;m++){
stringArray[count][m]=str[m];
}
count++;
}
while (str[0] != 'g'); //or anything else other than g