c - 如何使用 strtok 读取 3x3 矩阵 - 我使用了 flex 但我不确定是否允许提交预处理源

标签 c file-io

我总是像躲避瘟疫一样避免使用 strtok,我只在快速使用时才使用 *scanf 系列。

flex 并不难,就是这样:

%{
double entries[9];
int position = 0;
int error = 0;
%}

%%
-?[0-9]+(\.[0-9]+)? {if(position == 9) { error = 1; } else { sscanf(yytext,"%lf",entries[position]); position++; } }
\n {}
\r {}
\t {}
. {}
%%

然后我使用 include 创建一个更大的代码文件(我们只能提交一个)并且我计划提交预处理后的源代码(这将包含行宏并且仍然会给出有用/不错的错误 - 如果存在的话,归功于 GCC!)但它看起来不太好。

看来讲师要我们用strtok!所以我做了一些阅读,发现:http://www.cplusplus.com/reference/cstring/strtok/避免这种情况我并不感到难过。

我在这里学到了一个教训,当你有过 C++ 编程的工作,当你有编程经验时,不要认为“入门模块”会很容易。

我问的原因是因为我不确定输入文件的格式,它似乎显示 3 行数字,数字由空格分隔,这一切都很好,但它是\n 还是另一个(或者\r\n 我认为是用于 Windows 的?)

很好,已经有人问过了! Reading a 3x3 Matrix from a file an then displaying it in C所以我有一个如何做到这一点的答案。尽管如此,请帮我解决strtok?我觉得我应该能够在这样的模块中跳槽。

最佳答案

我不清楚,是否要填充 3x3 矩阵而不使用 strtok

构建您自己的函数,使用 strtod 很容易:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *s = "1.1 2.1 3.1\r\n1.2 2.2 3.2\n1.3 2.3 3.3", *p = s;
    double data[3][3];
    int i = 0, n = 9;

    for (i = 0; i < n; i++) {
        data[0][i] = strtod(p, &p);
    }
    return 0;
}

适用于 \n\r\n 因为 strtod 丢弃空白和 isspace 字符。

关于c - 如何使用 strtok 读取 3x3 矩阵 - 我使用了 flex 但我不确定是否允许提交预处理源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19835451/

相关文章:

c - 如何在C中使用scanf获取数组中的整数输入?

java - 无法在所有计算机上访问 JAR 中的资源

python - 导入文本文件出错

node.js - 在 Node.js 中事务性地写入文件

c - 二维数组上的位置 0 0 不保存整数

c - rand() 函数在选择 IP 时具有概率

c - 减少静态库大小的编译器选项和其他机制是什么?

c - 链接器如何解析链接?

c++ - 用于在 Windows 7 上输出的 fstream

c - 在运行计算密集型任务时将数据保存到磁盘的有效方法