求助,如何用Scanf或Gets函数将连续输入的,以回车隔开的多个字符串分别写入数组,再原封不动的打印出来?

我试了很多方法,现在想用gets,但是有两个问题:
1.如果我想在一个数组中存多个字符串,是否需要使用二维数组?
比如输入:
orange
apple
将orange存在list[0][0-5]
将apple存在list[1][0-4]
那么数组中是否存在'\o'呢?
2.如何结束输入循环?
我无法以for((gets(list1[li1])!=EOF)之类的语句结束循环,此时按Ctrl+D没有作用(Linux环境),代码应该如何写才能中止输入循环进行下面的Print工作? 谢谢!
我是用C语言的...请问第一个问题能给点代码提示吗?
还有第二个...不是按键问题,也是代码问题,同样,最好给出关键代码,谢谢!

1.需要用二维字符数组

2.
原因在于gets()的返回值是传入的参数的地址,而不是读取的字符,以下程序可以达到你的目的,注意输入CTRL+D时要另起一行。
//---------------------------------------------------------------------------

#include <stdio.h>

int main(void)
{
char a[100][80];
int i,n;
for (i=0; ;++i ) {
if((a[i][0]=getchar())==EOF) {
a[i][0]='\0';
break;
}
else gets(&a[i][1]);
}
for (n=0; a[n][0]; n++) {
puts(a[n]);
}
return 0;
}
//---------------------------------------------------------------------------
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-21
对于第一个问题:
如果是c++,只要用string型变量就可以了。
在C语言中麻烦点,但是,也行,可以用多维数组,但不能够用gets.
O(∩_∩)O~
第二个问题:
windows环境下那两个组合键不是Ctrl+D,我记不清了,你可以换用-1或0 也行。
第2个回答  2010-04-21
可以用指针数组
char data[100];
char*abc[10];
gets(data); 单词之间打空格回车结束 (字符单个输入getschar())
data被定义了如
data[100]={"i am shuang yu you xia "};
for(j=0;j<100;j=j+1);
{
*abc[i]=data[j];
if(j==" ") /* " "为空格字符*/
i=i+1;
}
这样
*abc[0]={"i "}
*abc[1]={"am "} 指针一维数组相当于二维数组
*abc[2]={"shuang "}
... ...

指针式c语言的精髓
属于高级程序员必掌握知识

参考资料:多学学指针有好处

相似回答