今天做头歌实验七第一题,题干描述:通过命令行参数将指定的文本文件内容显示在屏幕上。给出的源程序中存在一些逻辑错误,对程序进行修改、调试,使之能够正确完成指定任务。
源“错误”代码:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
FILE * fp;
if(argc!=2){
printf("Arguments error!\n");
exit(-1);
}
if((fp=fopen(argv[1],"r"))==NULL){ /* fp指向filename */
printf("Can't open %s file!\n", argv[1]);
exit(-1);
}
while(!feof(fp))
putchar(fgetc(fp)); /* 向显示器中写从filename中读取的字符 */
fclose(fp); /* 关闭filename */
return 0;
}
我就奇怪,这代码我用vscode跑得起来,然后在黑窗口里面也是正常的,但是头歌平台上测试会有一个乱码:
!@#$%^&�
就是和预期输出相比,后面多了一个菱形问号乱码。。。这叫我咋整?后来我想到实验书上遍历文件内容时不是用的上面的feof()函数,我就抱着死马当成活马医的心思改了一下,没想到好了!
“改正”的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
if (argc != 2)
{
printf("Arguments error!\n");
exit(-1);
}
if ((fp = fopen(argv[1], "r")) == NULL)
{ /* fp指向filename */
printf("Can't open %s file!\n", argv[1]);
exit(-1);
}
char c;
while ((c=fgetc(fp))!=EOF)
putchar(c); /* 向显示器中写从filename中读取的字符 */
fclose(fp); /* 关闭filename */
return 0;
}
但不太明白个中缘由。。不太懂这样的怎么调试,用命令行控制的