gpt4 book ai didi

c - 双 "for"循环中的 fgets 和 strtok

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:50 25 4
gpt4 key购买 nike

我正在尝试将文件的内容提取到矩阵中,但文件看起来可能完全不同。

例如所有这些文件应该给出相同的结果:一个包含 1,2,3,4,5,6,7,8,9 的 3x3 矩阵。


1 2 3 
4 5 6
7 8 9

1  2  3 
4 5 6
7 8 9

1 2 3 4
5
6
7 8
9

1 2 3
$something
$something else
4 5 6
$something else else
7 8 9

希望我事先知道矩阵的维度以及指示这些行在当前过程中将被忽略的“$”字符。

我当前使用 fscanf 的算法效果很好,但它无法处理“$something”行。

我认为我应该使用 fgets/strtok/sscanf 方法,但存在一些问题。

// File* file (already assigned)
char line[32]; //assuming 32 is enough
char* token;

fgets(line,32,file);
token = strtok(line," \t");

for (y=0; y<ySize; y++)
{
for (x=0; x<xSize, x++)
{
if (token[0] == '$') //should use a str function
{
fgets(line,32,file);
token = strtok(line," \t")
x--;
}
else
{
if (we are at the end of the line)
{
fgets(line,32,file);
token = strtok(line," \t")
}
sscanf(token,"%d",&matrix[x][y];
token = strtok(NULL," \t");
}
}
}

基本上我想得到一些帮助来编写“如果(我们在行尾)”条件和我的方法的一些输入,它是完美无缺的吗?我是否正确地想到了这个过程?

谢谢。

最佳答案

您应该使用 getline 而不是 fgets 以使事情变得更容易。后者是不可靠的。您正在寻找的测试条件是:

token == NULL;

检查 this : "一旦在对 strtok 的调用中找到 str 的终止空字符,所有以空指针作为第一个参数对该函数的后续调用将返回一个空指针。"

关于c - 双 "for"循环中的 fgets 和 strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com