任何人都有关于从每行文本文件读取序列号并将其解析为C中的数组的任何事情?
我在文件中有什么:
12 3 45 6 7 8
3 5 6 7
7 0 -1 4 5
Run Code Online (Sandbox Code Playgroud)
我想要的程序:
array1[] = {12, 3, 45, 6, 7, 8};
array2[] = {3, 5, 6, 7};
array3[] = {7, 0, -1, 4, 5};
Run Code Online (Sandbox Code Playgroud)
我已经通过几种方式阅读它,但唯一的问题是我想要每行标记它.谢谢.
Chr*_*isF 10
以下代码将一次读取一行文件
char line[80]
FILE* fp = fopen("data.txt","r");
while(fgets(line,1,fp) != null)
{
// do something
}
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用strtok()和sscanf()将输入标记为输入,以将文本转换为数字.
从sscanf的MSDN页面:
这些函数[sscanf和swscanf]中的每一个都返回成功转换和分配的字段数; 返回值不包括已读但未分配的字段.返回值0表示未分配任何字段.如果出现错误,或者在第一次转换之前到达字符串的结尾,则返回值为EOF.
以下代码将字符串转换为整数数组.显然,对于可变长度数组,您需要一个列表或一些扫描输入两次以确定数组在实际解析之前的长度.
char tokenstring[] = "12 23 3 4 5";
char seps[] = " ";
char* token;
int var;
int input[5];
int i = 0;
token = strtok (tokenstring, seps);
while (token != NULL)
{
sscanf (token, "%d", &var);
input[i++] = var;
token = strtok (NULL, seps);
}
Run Code Online (Sandbox Code Playgroud)
把:
char seps[] = " ,\t\n";
Run Code Online (Sandbox Code Playgroud)
将允许输入更灵活.
我不得不进行搜索以提醒自己语法 - 我在MSDN中找到它