簡體   English   中英

我的C文件正在寫隨機字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM