带有可选文本的Scanf

带有可选文本的Scanf

我试图读取一个.txt文件,它在第一行和下面包含一个数组
问题是第一行可能是,也可能不是,像这样的括号中的一个字母A:[A]。
例如:
何塞·佩雷斯[甲]或可能拥有何塞·佩雷斯
当我在这里运行上述代码时,如果第一行不包含[a]则执行值的移位,例如矩阵[1][1]的值作为tester向上,并在末尾插入0以完成矩阵。
下面是当第一行中有一个[a]而不是

FILE* text=NULL;
    text=fopen(archivo,"r");
    char name[100];
    char last_name [100];
    char verifier [10];
    int matriz[6][4];
    int i  ;
    int lu,ma,mi,ju,vi;
    if (text == NULL) {
    }
    else {
        fscanf(text,"%s %s %s [^\n]",name, last_name, verifier);
        for( i= 0; i<7;i++){
            fscanf(text,"%d %d %d %d %d [^\n]",&lu, &ma, &mi,&ju,&vi);
            matriz[i][0] = lu;
            matriz[i][1] = ma;
            matriz[i][2] = mi;
            matriz[i][3] = ju;
            matriz[i][4] = vi;
        }
Result:
    Jose Perez 1
    0 0 0 0 0
    1 0 1 0 1
    0 1 1 1 1
    0 1 1 0 0
    1 0 0 0 0
    1 1 1 0 0
    1 0 1 0 0
    Juan Perez A
    1 0 1 1 1
    0 0 1 1 1
    0 0 1 0 1
    0 0 1 1 1
    1 0 1 0 1
    0 0 1 1 1
    0 1 1 1 0

可以解决的问题?

最佳答案

    char line[80], fname[16], lname[16], third[4];
    fgets(line, 80, fp)
    if (sscanf(line, "%s %s %s\n",
              fname, lname, third) == 3 && strcmp(third, "[A]") == 0)
        // the line has a [A] at the end
    else if (sscanf(line, "%s %s\n", fname, lname) == 2)
        // the line does not have a [A] at the end
    else
        fprintf(stderr, "Invalid line");

fgets从文件中读取下一行。如果不为空,则检查sscanf的返回值。它返回分析的项目数。所以,一旦成功,它应该会返回3。如果在行尾包含[A],则third变量应与[A]进行比较。
在所有这些之后,我们可以继续读取数组。

关于c - 带有可选文本的Scanf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33714101/

10-10 05:25