#include <stdio.h>
#include <string.h>
static const char nameOfFile[] = "blablabla.txt";
char lineG [128];
static char * readLine()
{
static FILE *file;
if(file == NULL)
file = fopen ( nameOfFile, "r" ); //opens the file
if ( file != NULL )
{
if( fgets ( lineG, sizeof (lineG), file ) != NULL ) //reads a line from file
return lineG;
else
fclose ( file );
}
else perror ( nameOfFile );
return NULL;
}
int main (void)
{
char *line, a;
line=readLine();
char c;
int a[30],b[30];
sscanf(line,"%c %d%d%d%d",&c,a[0],b[0],a[1],b[1]);
return 0;
}
如你所见,我试图从文件中读取int字符串。但我不知道有多少int夫妇(如12,23;)会有。我正在寻找适合所有人的解决方案 txt文件将是这样的(两行或更多行)
A 12,54;34,65;54,56;98,90 B 23,87;56,98
答案 0 :(得分:1)
使用%n
格式说明符并一次读取一个整数。相关的参数
%n
填充了sscanf()
读取的字符串的索引。 C99标准中格式说明符n
的说明:
不消耗任何输入。 相应的参数应该是指针 有符号整数,用于写入从中读取的字符数 到目前为止,通过调用fscanf函数的输入流。执行一个 %n指令不会增加返回的赋值计数 完成fscanf函数的执行。没有参数被转换, 但是有一个被消耗了。如果转换规范包括赋值抑制 字符或字段宽度,行为未定义。
需要动态分配的数组(使用malloc()
)来存储int
并根据需要进行扩展(使用realloc()
)。读取int
(但不添加到数组)的简单示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
const char* in = "15 16 17 18";
int i;
int pos = 0;
int total_pos = 0;
while (1 == sscanf(in + total_pos, "%d%n", &i, &pos))
{
total_pos += pos;
printf("i=%d\n", i);
}
return 0;
}
参见在线演示@ http://ideone.com/sWcgw0。
答案 1 :(得分:1)