Bir dosyadan, satır satırdan, biçimlendirilmiş bir dizeden ve bağlantılı bir listede saklamayı denemeye çalışıyorum.Bir dosyadan okuyun ve biçimlendirilmiş satırı bağlantılı listeye girin. C
Benim typedef: Ben den okuyorum bir dosyanın
typedef struct s_deck {
char name[16];
int atk;
int def;
int cost;
struct s_deck* next;
} card;
Örnek:
Line 1: Name 4 4 5
Line 2: Name2 5 5 5
Benim işlevi ben böyle bir şey yapmak için uygulamaya çalışıyorum ...
card *LoadDeck() {
FILE* file = fopen("text", "r");
if(file == NULL) {
printf("unable to open file...\n");
}
char line[16];
card* start = NULL;
card* newest = NULL;
card* previous = NULL;
fgets(line, 15, file);
card* newCard = malloc(sizeof(card));
sscanf(line, "%s %d %d %d\n", newCard->name, &newCard->atk,
&newCard->def, &newCard->cost);
printf("Added:%s Attack:%d Defense:%d Cost:%d\n", newCard->name, newCard->atk,
newCard->def, newCard->cost);
if (start == NULL) {
start = LoadDeck(NULL);
newest = start;
}
else {
newest = LoadDeck(newest);
}
if (previous != NULL) {
previous->next = newCard;
}
fclose(file);
return newCard;
}
Yani yaşıyorum sorunum buna ilk satırı ve sadece ilk satırı okur sonsuz döngü olmasıdır. Elimdeki baskı, onun ne yaptığını görmek ve ... çizgiyi doğru okuyor ama bunu yapmaya devam ediyor ve asla durmuyor. onun düzgün henüz bağlantılı listesi oluşturma eğer
Bilmiyorum. Bu kadar uzaklaşmadım. Sanırım doğru bir şekilde uyguladım, ancak çok zor olan kitaplardan sadece. Burada bazı sorular bulmaya çalıştım ama onların okuduğu dosya benimkinden çok daha karmaşıktır, bu yüzden daha basit bir yol olması gerektiğini düşündüm.
Not. Al, scanf'in ailesinin dönüş değerini kontrol edin. 'if (sscanf (...)! = 4)' –
Giriş dosyası gerçekten 'Satır X: 'önekini içeriyor mu? –
Sorununuza gelince, bir dosyayı açtığınızda, dosya konumu işaretçilerinin başa sıfırlandığını biliyor musunuz? Yineleme yerine bir * döngü * kullanın. –