[英]Reading multiple lines of multiple numbers(the amount of numbers are not specified) in C
我需要编写一个程序,该程序接受两行输入,每行由未指定数量的数字组成,并将每行存储在单独的vector(int *)中。
不允许使用字符串存储输入,然后将其转换为int。
它必须在Linux环境中工作,实际上我已经使用以下代码在Windows中解决了它:
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上对其进行了测试,至少对我来说,它不起作用。
非常感谢您的帮助,非常感谢!
我在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')
循环,因为它可以消除重复的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.