fscanf()函数。使用C中的模式读取文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fscanf()函数。使用C中的模式读取文件相关的知识,希望对你有一定的参考价值。
我必须使用scanf
读取txt文件并在控制台中显示内容。用scanf
做这件事是必要的。还应在输出中省略#
lines。
我有下一个txt文件:
# Lista ciudades
Coruña, Vigo, Valladolid, Oviedo, Bilbao, Zaragoza, Gerona, Barcelona, Madrid, Badajoz, Albacete, Valencia, Murcia, Jaén, Sevilla, Granada, Cádiz
# Distancias entre ciudades
Coruña Vigo 171
Coruña Valladolid 455
Vigo Valladolid 356
Valladolid Bilbao 280
Valladolid Madrid 193
Oviedo Bilbao 304
Bilbao Madrid 395
Bilbao Zaragoza 324
Madrid Zaragoza 325
Zaragoza Barcelona 296
Barcelona Gerona 100
Valencia Barcelona 349
Madrid Badajoz 403
Madrid Jaén 335
Madrid Albacete 251
Albacete Valencia 191
Albacete Murcia 150
Murcia Granada 284
Murcia Valencia 241
Granada Jaén 99
Granada Sevilla 256
Jaén Sevilla 242
Sevilla Cádiz 125
期望的输出是:
Coruña Vigo Valladolid Oviedo Bilbao Zaragoza Gerona Barcelona Madrid Badajoz Albacete Valencia Murcia Jaén Sevilla Granada Cádiz
Coruña Vigo 171
Coruña Valladolid 455
Vigo Valladolid 356
Valladolid Bilbao 280
Valladolid Madrid 193
Oviedo Bilbao 304
Bilbao Madrid 395
Bilbao Zaragoza 324
Madrid Zaragoza 325
Zaragoza Barcelona 296
Barcelona Gerona 100
Valencia Barcelona 349
Madrid Badajoz 403
Madrid Jaén 335
Madrid Albacete 251
Albacete Valencia 191
Albacete Murcia 150
Murcia Granada 284
Murcia Valencia 241
Granada Jaén 99
Granada Sevilla 256
Jaén Sevilla 242
Sevilla Cádiz 125
为实现这一目标,我想的是:
contadorAlmoadillas = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
// If contadorAlmoadillas is 1
while (fscanf(fichero, " %[^,]",buffer) != NULL) {
printf("%s ", buffer);
}
// If contadorAlmoadillas is 2
while (fscanf(fichero, " %[^ ], %[^ ], %[^
]",buffer1,buffer2,&d) != NULL) {
printf("%s %s %i
", buffer1,buffer2,d);
}
fclose(fichero);
}
但我没有得到理想的输出。这是由于scanf模式。
另外,我现在知道如何计算#
字符出现多少次,所以我无法实现if语句。
知道我该怎么办?
谢谢。
答案
我达到了我的目的。我有它喜欢:
// WAY 1
int contadorAlmoadillas = 0;
int contadorCamposLinea = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
while (fscanf(fichero, " %[^,
]%*c",buffer) != EOF) {
G:
if (buffer[0] == '#') {
fscanf(fichero, " %[^
]",buffer);
printf("
# %s
", buffer); // CABECERA
contadorAlmoadillas++;
} else {
// # Lista ciudades
if (contadorAlmoadillas == 1) {
printf("%s ", buffer); // CIUDAD
// # Distancias entre ciudades
} else if (contadorAlmoadillas == 2) {
if (contadorCamposLinea < 3) {
printf("%s ", buffer); // NODO1 Y NODO2 Y PESO
contadorCamposLinea++;
} else {
printf("
");
contadorCamposLinea = 0;
goto G;
}
}
}
}
printf("
");
fclose(fichero);
}
// WAY 2
int contadorAlmoadillas = 0;
int contadorCamposLinea = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
while (fscanf(fichero, " %[^,
]%*c",buffer) != EOF) {
if (buffer[0] == '#') {
fscanf(fichero, " %[^
]",buffer);
printf("
# %s
", buffer); // CABECERA
contadorAlmoadillas++;
} else {
// # Lista ciudades
if (contadorAlmoadillas == 1) {
printf("%s ", buffer); // CIUDAD
// # Distancias entre ciudades
} else if (contadorAlmoadillas == 2) {
if (contadorCamposLinea < 2) {
printf("%s ", buffer); // NODO1 Y NODO2
contadorCamposLinea++;
} else {
printf("%s
", buffer); // PESO
contadorCamposLinea = 0;
}
}
}
}
fclose(fichero);
}
两种方式都相同,一种使用TAG,另一种避免使用。我希望它对任何人都有帮助。
问候。
以上是关于fscanf()函数。使用C中的模式读取文件的主要内容,如果未能解决你的问题,请参考以下文章