如何解决循环在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] != '\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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。