[英]My C file is writing random characters
我正在用C創建戰艦游戲,但是在此函數中,用於將新記錄放置在記錄文件中並使其保持秩序,該函數在文件中寫入了許多隨機字符。 這是結構:
typedef char nom_tipus [MAX_NOM];
typedef struct
{
nom_tipus nom;
int puntuacio;
} record_tipus;
這里是一個假設的結果示例:
testdeunum 300asdf 151aaa 150bbb 149ccc 148ddd 147eee 146fff 145ggg 144hhh 143iii 142jjj 141kkk 140lll 139mmm 138nnn 137ooo 136ppp 135qqq 134rrr 133vss 132ttt 131uuu 130v“
這是最終文件:
Name 360mfuÿ<a |ø` H 300f Iufu{<a ` †lÔwúÒwÿÿÿÿ$ xø` G»ðÛ— akhud ylu ø` …thu¸?muàø` ¢ihu ssgujsgu– b bu ylu´ø` 0.buLkÔw\1«uL 151akhud ylu ø` …thu¸?muàø` ¢ihu ssgujsgu– b bu ylu´ø` 0.buLkÔw\1«uL 150b bu ylu´ø` 0.buLkÔw\1«uL 149cù` 0 m1«uiÐw (ú` L ” d (ú` bu0ú` “ e Œ®PØ€ù` B¤Òw0p@ €,@ àù` 4@ 0p@ 5n ú` ’ fHì¯ -@ @ ø1n p.n Ôù` ®jÔw @ ‘ gkÔw\1«uL <kÔwéïªu 148d (ú` bu0ú` “ e Œ®PØ€ù` B¤Òw0p@ €,@ àù` 4@ 0p@ 5n ú` ’ fHì¯ -@ @ ø1n p.n Ôù` ®jÔw @ ‘ gkÔw\1«uL <kÔwéïªu 147e Œ®PØ€ù` B¤Òw0p@ €,@ àù` 4@ 0p@ 5n ú` ’ fHì¯ -@ @ ø1n p.n Ôù` ®jÔw @ ‘ gkÔw\1«uL <kÔwéïªu 146fHì¯ -@ @ ø1n p.n Ôù` ®jÔw @ ‘ gkÔw\1«uL <kÔwéïªu 145gkÔw\1«uL <kÔwéïªu 144h¼B3 0ú` $¨iuÄú` 8ú` Ãeu\ú` Pmup Ðü` ¬iu imu¬ú` ’³iu€ú`
Pmu€ú` $¨iuý` ˆú` ÃeuŽ jmup 143imu¬ú` ’³iu€ú`
Pmu€ú` $¨iuý` ˆú` ÃeuŽ jmup 142jmup 141k ¨ ý` -ú` B Œ l (mu ÿQ@ 6ïiu ýÿÿÿxý` @ d Cý` …üiu‹ mmumu :þiuPmup ¨ ÿÿÿ”û` tý` xý` °ý` P@ Š n °ý` ”û` ¤û` ‰ o muÜû ÿ IÄfu+?amud mu ˆ p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 140l (mu ÿQ@ 6ïiu ýÿÿÿxý` @ d Cý` …üiu‹ mmumu :þiuPmup ¨ ÿÿÿ”û` tý` xý` °ý` P@ Š n °ý` ”û` ¤û` ‰ o muÜû ÿ IÄfu+?amud mu ˆ p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 139mmumu :þiuPmup ¨ ÿÿÿ”û` tý` xý` °ý` P@ Š n °ý` ”û` ¤û` ‰ o muÜû ÿ IÄfu+?amud mu ˆ p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 138n °ý` ”û` ¤û` ‰ o muÜû ÿ IÄfu+?amud mu ˆ p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 137o muÜû ÿ IÄfu+?amud mu ˆ p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 136p @þ` ðÑguŸBþÿÿÿôû` 1iumumud „ü` ü` 6ïiu‡ qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØfu €Øfuo8a … sü` Õ§fuܧfu_8a (mu ¤ü` Þ¬fuø „ tØfu €Øfu8a (mu 8a$ ´ü` Xý` ƒ uBþÿÿÿ€Øfu…3iu à 135qü` ¤iu
d þ` …üiuø Xü` Õ§fuܧfu¯8a † r Tü` Þ¬fuø ˜ü` UØf"
這是代碼:
#define MAX_RECORDS 25
#define MAX_NOM 50
bool emmagatzema_records(int punts, nom_tipus nom) {
int i, j;
char n;
record_tipus records[MAX_RECORDS];
FILE *f;
f = fopen("fitxer_records.txt", "r");
i = 0;
while (i < MAX_RECORDS) {
j = 0;
fscanf(f, "%c", &n);
while (n != ' ' && j < MAX_NOM) {
records[i].nom[j] = n;
fscanf(f, "%c", &n);
}
fscanf(f, "%d", &records[i].puntuacio);
if (punts > records[i].puntuacio) {
if (i == MAX_RECORDS - 1) {
records[i].puntuacio = punts;
for (j = 0; j < MAX_NOM; j++) {
records[i].nom[j] = nom[j];
}
} else {
records[i + 1].puntuacio = records[i].puntuacio;
records[i].puntuacio = punts;
for (j = 0; j < MAX_NOM; j++) {
records[i + 1].nom[j] = records[i].nom[j];
}
for (j = 0; j < MAX_NOM; j++) {
records[i].nom[j] = nom[j];
}
punts = 0;
i = i + 1;
}
}
i = i + 1;
}
fclose(f);
f = fopen("fitxer_records.txt", "w");
for (i = 0; i < MAX_RECORDS; i++) {
j = 0;
while (records[i].nom[j] != ' ' && j < MAX_NOM) {
fprintf(f, "%c", records[i].nom[j]);
j = j + 1;
}
fprintf(f, "%c", ' ');
fprintf(f, "%d", records[i].puntuacio);
}
return true;
}
一次讀取一個字符的字符串時,您永遠不會遞增j
:
while (n!=' ' && j<MAX_NOM)
{
records[i].nom[j++]=n; // note `j` changed to `j++`
fscanf(f, "%c", &n);
}
當然,這並不是讀取字符串的通常方法。 您應該改用fgets
東西。 而且,您也確實應該檢查I / O錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.