我目前正在编写一个需要从文本文件中提取字符串和数字数据的c ++程序.数据格式如下;
3225 C9+ ELECTR C8 C * 1.00E-6 -0.30 0.0
Run Code Online (Sandbox Code Playgroud)
第一个条目是整数,接下来的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]);
Run Code Online (Sandbox Code Playgroud)
这很好用,直到我遇到一条线;
3098 SIC2H3+ ELECTR SIC2H2 H * 1.50E-7 -0.50 0.0
Run Code Online (Sandbox Code Playgroud)
其中一个托盘是完整的7个字符长.在这种情况下,我得到;
names[3097][0] = "SIC2H3+ELECTR"
Run Code Online (Sandbox Code Playgroud)
和,
names[3097][1] = "ELECTR"
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法...他们将不胜感激!
最可能的问题是声明names
:如果你声明它持有7个字符或更少,并且忘了分配空间来终止零,你就会得到你所描述的结果.
char names[MAX][4][7]
Run Code Online (Sandbox Code Playgroud)
将有足够的空间用于长度为6或更短的字符串; 对于长度为7的字符串,您需要
char names[MAX][4][8]
Run Code Online (Sandbox Code Playgroud)