繁体   English   中英

在C中读取多行多个数字(未指定数字量)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM