【发布时间】:2022-01-02 17:09:57
【问题描述】:
它所做的只是运行函数,但由于某种原因,在我按下r 后它并没有中断,它只是运行函数然后结束程序。
int main()
{
char key = 0;
PPMImage *img = NULL;
do {
puts("\tPress r to read in an image in ppm format");
puts("\tPress s to save image in ppm format");
puts("\tPress q to quit");
scanf(" %c", &key);
clear_to_end(stdin);
switch (key) {
case 'r':
load_file("fname");
free(img->data);
break;
case 's':
save_file(img);
break;
case 'q':
puts("\tTerminating program...");
break;
default:
puts("\tInvalid Input");
break;
}
} while (key != 'q');
}
【问题讨论】:
-
你认为这段代码中的什么应该让程序“在我按下 r 后中断”?
-
关于
free(img->data);。变量img是NULL并且没有任何改变(即使在load_file或save_file中也没有),然后你取消引用它:ka-sloot。 -
啊,是的。这是我犯的一个愚蠢的错误。
-
...当您致电
save_file(img);时,这与load_file中发生的任何事情都无关。顺便说一句,尽量避免像clear_to_end(stdin);这样的杂乱无章,这在此处是不必要的,如果您了解scanf如何处理空格(您显然是这样做的),则很少这样做。 -
应该是免费的(img)吗?另外,您是否在此代码之前的某个地方定义 PPMImage 是什么,如果不使用 unsigned char *img = NULL;
标签: c switch-statement case break