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

C 如何使用strtok读取3x3矩阵-我使用flex,但我';我不确定是否允许提交预处理的源,c,file-io,C,File Io,我总是像躲避瘟疫一样避开斯特托克,我只在快脏的时候才使用*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 {} . {}

我总是像躲避瘟疫一样避开斯特托克,我只在快脏的时候才使用*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创建了一个更大的代码文件(我们只能提交一个),我计划提交预处理的源代码(这将包含行宏,并且仍然会给出有用的/不错的错误-如果存在,请归功于GCCs!),但它看起来不太好

看来讲师想让我们用strtok!所以我读了一些书,发现:我不为避免这个而感到难过

我在这里学到了一个教训,当你在C++中有了工作程序,当你有了编程经验时,不要认为“介绍模块”是容易的点。 我问这个问题的原因是因为我不确定输入文件的格式,它似乎显示了3行数字,数字之间用空格分隔,这一切都很好,但它是\n还是另一行(或者\r\n我认为是windows?)


啊好,有人已经问过了!因此,我有一个如何做到这一点的答案。尽管如此,请帮我拿一下斯特克好吗?我觉得我应该能够在这样一个模块中轻松完成任务。

您可能想看看strtok函数的实现

如cplusplus.com所述,要点是:

找到最后一个令牌的点由函数在内部保留,以便在下次调用时使用(不需要特定的库实现来避免数据争用)。

请参阅microsoft版本中的声明


静态字符*lastToken=NULL;/*不安全的共享状态*/

我不清楚,是否要填写一个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;
}
#包括
#包括
内部主(空)
{
char*s=“1.1 2.1 3.1\r\n1.2.2 3.2\n1.3 2.3 3”,*p=s;
双数据[3][3];
int i=0,n=9;
对于(i=0;i

可以同时使用
\n
\r\n
,因为
strtod
丢弃空格和
isspace
字符。

输入文件的格式为浮点数(或双精度,如您所愿),由空格或新行分隔。如果你读的数字超过9个,你就有一个错误。我不清楚,你想用
strtok()
做什么?@fvdalcin我想我必须,我想用flex,我贴出来是为了表明我能做到。如果你必须用
strtok
,也许你可以改写你自己的版本,它没有全局状态?什么是STDLIB行为?抱歉反射接受,因为它看起来很好,这是C++,这是C.你可以自由接受你想要的,但是这个代码与C和C++:)它不与C90编译。