[英]fscanf(). Read a file with a pattern in C
我必須使用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語句。
知道我該怎么做嗎?
謝謝。
我實現了我的目標。 我有這樣的:
// 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,另一種是避免使用。 我希望它對其他任何人都有幫助。
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.