小弟最近编写了两个c语言源程序,但其中种种问题无法解决,特来求助
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE*out;
char outfile[20],ch;long i=0;
printf("!\n");
scanf("%s",outfile);
if((out=fopen(outfile,"r"))==NULL)
printf("NO !\n");
for(i=0;!feof(out);i++)
ch=fgetc(out);
fclose(out);
getch();
return 0;
}
文件二
#include<stdio.h>
#include<stdlib.h>
int main()
{FILE*in,*out;
char ch,infile[20],outfile[20];long i=0;
printf("in\n");
scanf("%s",infile);
printf("out\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("NO in!\n");exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("NO out!\n");exit(0);
}
for(i=0;!feof(in);i++)
{
ch=fgetc(in);
fputc(ch,out);
printf("%ld//****\n",i);
}
fcloce(in);fclose(out);
return 0;
} 展开
首先我们来讨论下第一个程序。
第一个程序的问题并不大,编译的时候编译器提示:
错误 3 error C3861: “getch”: 找不到标识符
我们分析这个错误,是编译器无法识别"getch"这个函数。经过查询,我们了解到getch()函数的确存在,并且详细信息如下:
函数名
getch
功 能
在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。
返回值
从键盘上读取到的字符
头文件
#include <conio.h>
注意这里提到的头文件,就是包含了这个函数定义的文件,你需要在文件开始加入进去进行编译才可以。所以加入#include <conio.h>后即编译通过!
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
FILE *out;
char outfile[20],ch;
long i=0;
printf("!\n");
scanf("%s",outfile);
if((out=fopen(outfile,"r"))==NULL)
printf("NO !\n");
for(i=0;!feof(out);i++)
ch=fgetc(out);
fclose(out);
getch();
return 0;
}
再来看第二个程序。
首次编译后提示错误如下:
错误 5 error C3861: “fcloce”: 找不到标识符
提示如同上一个程序中关于"getch"的提示。我们查询后发现floce并不存在,但是联系上下文可以判断此处应当是关闭文件指针的操作,对应的函数应当为fclose。因此将其更改为fclose(in)即可编译通过。
程序如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *in,*out;
char ch,infile[20],outfile[20];
long i=0;
printf("in\n");
scanf("%s",infile);
printf("out\n");
scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL)
{
printf("NO in!\n");exit(0);
}
if((out=fopen(outfile,"w"))==NULL)
{
printf("NO out!\n");exit(0);
}
for(i=0;!feof(in);i++)
{
ch=fgetc(in);
fputc(ch,out);
printf("%ld//****\n",i);
}
fclose(in);
fclose(out);
return 0;
}
问题都是小问题,但是反映出了一些问题。
1、首先是程序的书写问题。程序二中你将fclose(in)和fclose(out)放在了一行里书写,这样如果某一个语句出现了错误,程序提示错误出现在第几行的时候你无法准确判断究竟是哪一个语句出现了错误。所以建议单条语句单行书写。
2、其次是关于定义变量时的书写问题。我注意到你在定义文件指针的时候是将FILE*in,out;连在一起书写的。其实在定义指针类型的变量的时候,*号是跟随着变量名称的,所以尽量在FILE和*号之间添加上一个空格,便于查看。
3、最后是关于查看错误信息的能力问题。通常编译错误的时候,编译器都会明确的通知你错误是什么,以及错误出现在程序中的第几行。有时候可能编译器显示不全,你可以右键后点击复制,然后将其错误信息粘贴出来查看。如下图所示:
如果实在不知道如何来解决,可以尝试将错误信息黏贴到百度或是其他搜索引擎上面查找,试图看看有没有网友遇到过相同或是相似的问题,从而获得解决办法。
望有所帮助,并祝愿楼主编程能力更进一步!
你只是在最后做个断点而已,使用getchar() 就够了。
getchar()和getch()功能上是有区别的。这个你最近百度下就是了。
文件二:
倒数第二句代码:fcloce(in);fclose(out); 写错了。。。
改为fclose(in);fclose(out);
这两个问题都解决了,程序可以运行了。多学学调试技巧,加油吧少年。
是fclose