C语言代码出错(文件)
#include<stdio.h>int main()
{
FILE *fp;
char c;
int n;
char ff = "123#";
fp = fopen("a1.txt","r");
fputs(ff,fp);
fclose(fp);
fp = fopen("a1.txt","r");
while((c = fgetc(fp))!='#')
{
putchar(c);
}
fclose(fp);
fp = fopen("a1.txt","r");
fscanf(fp,"%d",&n);
printf("%d\n",n);
fclose(fp);
}
请问一下是哪里出错了 首先,你想要这个代码达到什么效果? 本帖最后由 liuzhengyuan 于 2020-4-21 09:32 编辑
你这个是“r”,怎么弄 puts 呢?
fp = fopen("a1.txt","r");
fputs(ff,fp);
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=166477&pid=4612619
把第九行 改成 “w”,w 的意思是写文件(r表示读文件,不对滴)
#include<stdio.h>
int main()
{
FILE *fp;
char c;
int n;
char ff = "123#";
fp = fopen("a1.txt","w");
fputs(ff,fp);
fclose(fp);
fp = fopen("a1.txt","r");
while((c = fgetc(fp))!='#')
{
putchar(c);
}
fclose(fp);
fp = fopen("a1.txt","r");
fscanf(fp,"%d",&n);
printf("%d\n",n);
fclose(fp);
}
第9行打开方式不对
你要写文件,却用r模式打开的 liuzhengyuan 发表于 2020-4-21 09:29
你这个是“r”,怎么弄 puts 呢?
#include<stdio.h>
int main()
{
FILE *fp;
char c;
int n;
char ff = "123#";
fp = fopen("a1.txt","r");
fputs(ff,fp);
fclose(fp);
fp = fopen("a1.txt","r");
while((c = fgetc(fp))!='#')
{
putchar(c); 一开始ff是字符123#,将123#给fp,fp里面是字符123#,怎么能赋给整型n??中间的类型转换是怎么进行的?
}
fclose(fp);
fp = fopen("a1.txt","r");
fscanf(fp,"%d",&n);
printf("%d\n",n);
fclose(fp);
}
这就是书上的一个题目,问它输出什么 老牛来学习 发表于 2020-4-21 09:34
这就是书上的一个题目,问它输出什么
不输出 sunrise085 发表于 2020-4-21 09:31
第9行打开方式不对
你要写文件,却用r模式打开的
#include<stdio.h>
int main()
{
FILE *fp;
char c;
int n;
char ff = "123#";
fp = fopen("a1.txt","r");
fputs(ff,fp);
fclose(fp);
fp = fopen("a1.txt","r");
while((c = fgetc(fp))!='#')
{
putchar(c); 一开始ff是字符123#,将123#给fp,fp里面是字符123#,怎么能赋给整型n??中间的类型转换是怎么进行的?
}
fclose(fp);
fp = fopen("a1.txt","r");
fscanf(fp,"%d",&n);
printf("%d\n",n);
fclose(fp);
}
老牛来学习 发表于 2020-4-21 09:34
这就是书上的一个题目,问它输出什么
如果改成 w,那就输出 123123 liuzhengyuan 发表于 2020-4-21 09:35
如果改成 w,那就输出 123123
改了,刚才打错了,中间是怎么转换的呀,问题在代码里 老牛来学习 发表于 2020-4-21 09:35
你这两种读文件方式
第一种,while循环,fgetc
fgetc每次读一个字符,遇到#结束
输出:123
第二种:fscanf
fscanf格式化读取,你要读的是一个int那就从前向后读取,读到 123,然后遇到#,#不是数字了,系统就认为能读到的就是123了
输出:123
两部分合起来,就是你看到的123123
若是你写文件的时候#在前,那么fscanf是读不到任何内容的。
你需要好好学习了一下scanf函数(fscanf与之很类似)
本帖最后由 liuzhengyuan 于 2020-4-21 09:48 编辑
老牛来学习 发表于 2020-4-21 09:39
改了,刚才打错了,中间是怎么转换的呀,问题在代码里
先输入文件 “123#”,代码说在不等于‘#’的情况下就输出
之后就是 fscanf 再输出,因为scanf 中是 %d 所以只能输入整数
然后在输出输入的内容
输出了两次 所以是 123123 sunrise085 发表于 2020-4-21 09:41
你这两种读文件方式
第一种,while循环,fgetc
fgetc每次读一个字符,遇到#结束
因为文件使用字符存的,所以他在数据中是按ascii码存的(这个理解对不对啊?)
因为它是ascii吗存的,所以在scanf是用%d输入到n时,不应该将字符123的ascii码转化成10进制输出吗
scanf函数输入的时候是stdin输入的,fscanf是文件里的,总感觉不一样{:10_251:}
本帖最后由 sunrise085 于 2020-4-21 10:25 编辑
老牛来学习 发表于 2020-4-21 10:05
因为文件使用字符存的,所以他在数据中是按ascii码存的(这个理解对不对啊?)
因为它是ascii吗存的, ...
你理解的有偏差
先说容易理解的问题
scanf和fscanf的差别:scanf是制定从标准输入流(stdin)进行读取,fscanf是从指定输入流进行读取,更多是用于读取文件,但是fscanf也可以从标准输入流读取,fscanf(stdin,"%d",&n)就可以从键盘输入进行读取了
再说读取格式问题
可以认为字符在文件中是以ASCII存储的,但是格式化读取就是要把对应的内容进行格式化啊
你认为从键盘敲进去123就是数字吗?不是!它也是字符键值,但是scanf就可以将之转为数字,这就是格式化的作用啊。
页:
[1]