我目前正在编写一个需要从文本文件中提取字符串和数字数据的c ++程序。数据的格式如下;
3225 C9+ ELECTR C8 C * 1.00E-6 -0.30 0.0
第一个条目是整数,接下来的5个条目是字符串,最后3个是浮点数。没有字符串长度超过7个字符。
我正在逐行读取文件,然后使用;
提取数据sscanf(ln.c_str(),"%d %s %s %s %s %s %e %e %e",
&rref[numre],&names[numre][0],&names[numre][1],&names[numre][2],&names[numre][3],
&names[numre][4],&nums[numre][0],&nums[numre][1],&nums[numre][2]);
这很好用,直到我遇到像这样的一行;
3098 SIC2H3+ ELECTR SIC2H2 H * 1.50E-7 -0.50 0.0
其中一个托盘是完整的7个字符长。在这种情况下,我得到了;
names[3097][0] = "SIC2H3+ELECTR"
和
names[3097][1] = "ELECTR"
任何人都有任何想法......他们将非常感激!!
答案 0 :(得分:6)
最可能出现的问题是names
的声明:如果你声明它持有七个或更少的字符,并且忘记分配空间来终止零,你就会得到你所描述的结果。< / p>
char names[MAX][4][7]
将有足够的空间用于长度为6或更短的字符串;对于长度为7的字符串,您需要
char names[MAX][4][8]