我需要创建一个带有两行输入的程序,每行输入一个未指定数量的数字,并将每个输入存储在一个单独的向量中(int *)。
不允许使用字符串存储输入,然后将其转换为int。
它必须在linux环境中工作,实际上我已经使用以下代码解决了它的问题:
int t,s1=0,s2=0;
char tx;
int* a=(int*)malloc(0);
int* b=(int*)malloc(0);
scanf("%i%c",&t,&tx);
while(tx!='\n')
{
a=(int*)realloc(a,sizeof(int)*(s1+1));
a[s1++]=t;
scanf("%i%c",&t,&tx);
}
a=(int*)realloc(a,sizeof(int)*(s1+1));
a[s1++]=t;
scanf("%i%c",&t,&tx);
while(tx!='\n')
{
b=(int*)realloc(b,sizeof(int)*(s2+1));
b[s2++]=t;
scanf("%i%c",&t,&tx);
}
b=(int*)realloc(b,sizeof(int)*(s2+1));
b[s2++]=t;
我已经在linux上测试了它,至少在我看来,它没有用。
非常感谢你的帮助,非常感谢你!
答案 0 :(得分:3)
我在linux上试过你的程序,对我来说,它很有用。我使用了以下输入文件:
1 2 3
4 5
我在gdb中运行它并在最终语句之后,调试器给出了以下值:
(gdb) print s1
$4 = 3
(gdb) print s2
$5 = 2
(gdb) print a[0]
$6 = 1
(gdb) print a[1]
$7 = 2
(gdb) print a[2]
$8 = 3
(gdb) print b[0]
$9 = 4
(gdb) print b[1]
$10 = 5
(gdb)
但是如果输入数据中有尾随空白,代码可能会失败。
您也不检查scanf()的返回值,因此如果scanf()失败,它可能会进入无限循环,例如由于早期的EOF。
如果使用Windows行结尾(\ r \ n)从文件中提供程序输入数据,也可能会遇到问题。
我也建议使用do {} while (tx!='\n')
循环,因为它消除了重复的代码。