我试图读取一个.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/