我必须使用scanf
读取txt文件并在控制台中显示内容。用scanf
做这件事是必要的。在输出中也应该省略#
行。
我有下一个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, " %[^ ], %[^ ], %[^\n]",buffer1,buffer2,&d) != NULL) {
printf("%s %s %i \n", buffer1,buffer2,d);
}
fclose(fichero);
}
但我没有得到理想的输出。这是由于scanf模式。
另外,我现在知道如何计算出#
个字符的次数,所以我无法实现if语句。
知道我该怎么办?
谢谢。
答案 0 :(得分:0)
我达到了我的目的。我有它像:
// WAY 1
int contadorAlmoadillas = 0;
int contadorCamposLinea = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
while (fscanf(fichero, " %[^,\n ]%*c",buffer) != EOF) {
G:
if (buffer[0] == '#') {
fscanf(fichero, " %[^\n]",buffer);
printf("\n\n\n# %s \n\n", 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("\n");
contadorCamposLinea = 0;
goto G;
}
}
}
}
printf("\n\n\n");
fclose(fichero);
}
// WAY 2
int contadorAlmoadillas = 0;
int contadorCamposLinea = 0;
if ((fichero = fopen("./files/carreteras.txt", "r")) != NULL) {
while (fscanf(fichero, " %[^,\n ]%*c",buffer) != EOF) {
if (buffer[0] == '#') {
fscanf(fichero, " %[^\n]",buffer);
printf("\n\n\n# %s \n\n", 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\n", buffer); // PESO
contadorCamposLinea = 0;
}
}
}
}
fclose(fichero);
}
两种方式都相同,一种使用TAG,另一种避免使用。我希望它对任何人都有帮助。
问候。