c - 循环中逻辑错误

标签 c file loops logic

尝试向我的 struct Player 添加值,但操作后我的输出是垃圾:

输出如下:

    Name: Warner
    runs: 0
    not out: 0
    how out: |||||||| (symbols)

Player is a struct:

Player {

int not_out, innings, runs;

char pname[MAX_NAME];

char how_out[5];

}

这是我的代码:

void scan_stats (Team_t player[]) {

int i, status, runs, turns;
char out;
char string[MAX_PLYR];


FILE *inp;

inp = fopen("teamstats.txt", "r");

do 
{

    fscanf(inp, "%s" "%d" "%*c" "%c", &string, &runs, &out);

    printf("%s    %d     %c\n", string, runs, out); /*They scan perfectly*/

    for (i = 0; i < MAX_PLYR; i++) {

        player[i].innings = 0;

        player[i].runs = 0; 

        player[i].not_out = 0;

        turns = -1;

        if (status = (strcmp(player[i].pname, string)) == 0) {

            player[i].innings = player[i].innings + 1;

            player[i].runs = player[i].runs + runs;

            turns = turns + 1;

            if (out == 'n') {

                player[i].not_out = player[i].not_out + 1;

            }

            else {

                player[i].how_out[turns] = out;

            }
        }
    }
} while (!feof(inp));    /*Printing the values of player at the end of this loop 
                               produces garbage/ incorrectness*/
fclose(inp);
}

最佳答案

您永远不会在player[i].how_out 中放置结束符'\0' - 您只需在其中放置char 即可。然后,您尝试将其打印为字符串。此时,printf 只是打印 if 找到的任何内容,直到它到达随机 NULL,这就是您得到的垃圾。

要解决此问题,请确保 player[i].how_out 在最后一个字符后有一个“\0”(或 NULL) - 并确保缓冲区足够大以容纳额外的 NULL。

关于c - 循环中逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803081/

相关文章:

JavaScript 本地应用程序保存/加载文件?

c - 如何正确初始化Raspberry?

c - 哪些数据结构和算法不能用 C 实现?

c - Jiffies - 如何计算经过的秒数?

python - 将呈现的 pdf 文件保存到模型字段 Django

c++ - 循环退出 vector 并出现错误进程已完成,退出代码为 -1073741819

c - 怎样才能释放token和aa指针呢?

C文件操作困惑

scala - 捕获 map 内的异常

用于用户输入的 C++ 字符串验证