gpt4 book ai didi

c - 作业 3.exe : 0xC0000005: Access violation reading location 0x33772c58 中 0x77ea15de 处出现未处理的异常

转载 作者:行者123 更新时间:2023-11-30 14:24:25 25 4
gpt4 key购买 nike

我不明白这个错误告诉我什么。当我运行程序时,它应该不断循环,直到用户输入 N (不再/退出)。我不明白发生了什么事。在第一组输入之后,在提示用户“您想处理新学生吗”之前,程序会抛出该异常。

我使用 Geany(它没有给我任何错误定义,它只是崩溃)和 Visual Studio 2010 运行它。

有人可以帮忙吗?

void draw_bar_chart(int student_id[], int percentage[], int size)
{
FILE *report;
int i, j=0, min = 1000000, max = 0, min_pos, max_pos, l;
char s[20];

report = fopen("report2.txt", "a");
fprintf(report, "\n******* BAR CHART (YEARLY TOTAL EXPENSES: YEARLY TOTAL INCOME) *******\n\n");

for (i = 0; i < size; i++)
{
fprintf(report, "%d%c", student_id[i], ' ');
if (percentage[i] > 0){
l = percentage[i]/10; //the lenght of the bar
if ((percentage[i]%10) > 0)
l++;
for (j = 0; j < l; j++)
s[j] = 'x';
s[l+1] = '\0';
} else {
s[0] = '!';
s[1] = '\0';
}

fprintf(report, "%-20s%6c%d%c\n", s, ' ', percentage[j], '%');

if (percentage[j] >= 0)
{
if (percentage[j] < min)
{
min = percentage[j];
min_pos = j;
}
if (percentage[j] > max)
{
max = percentage[j];
max_pos = j;
}
}
}


fprintf(report, "***lowest percentage: %d%c (student ID: %d)\n", min, '%', student_id[min_pos]);
fprintf(report, "***highest percentage: %d%c (student ID: %d)\n", max, '%', student_id[max_pos]);

fclose(report);

}

最佳答案

我可以看到以下错误:

  1. 应该是 s[l] = '\0',而不是 s[l+1] = '\0'。
  2. 在 s 中写入 bar 后,所有出现的 j 都必须替换为 i。
  3. min_pos 和 max_pos 可能未初始化。

真正的问题是第二个问题。您可以通过养成将变量放在尽可能小的范围内的习惯来避免此类错误。也就是说,您是否写过:

        ...
fprintf(report, "%d%c", student_id[i], ' ');

/* display percentage */
{
char s[20];

if (percentage[i] > 0) {
int l, j;

l = percentage[i] / 10; // the length of the bar
if ((percentage[i]%10) > 0)
l++;
for (j = 0; j < l; j++)
s[j] = 'x';
s[l] = '\0';
}
else {
s[0] = '!';
s[1] = '\0';
}

fprintf(report, "%-20s%6c%d%c\n", s, ' ', percentage[i], '%');
}

/* update min, max */
if (percentage[i] >= 0) {
...

那么代码会更容易理解,如果您在/* update ... */之后错误地使用 j 而不是 i,编译器会给您一个错误。更好的方法是将百分比显示位放在单独的函数中。

顺便说一句,格式字符串中不需要这些 %c,只需直接输入字符即可。 % 可以用 %% 进行转义。

关于c - 作业 3.exe : 0xC0000005: Access violation reading location 0x33772c58 中 0x77ea15de 处出现未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com