fprintf和fscanf的用法

#include<stdio.h>#include<stdlib.h>#include<iostream>intmain(){inta=100;charstr[]="he... #include <stdio.h>
#include <stdlib.h>
#include<iostream>
int main()
{
int a=100;
char str[] = "hello";
FILE *fp = NULL;

fp = fopen("test.txt", "w");
if (fp == NULL)
{
printf("Cann't open the file!");
exit(1);
}
else
{
fprintf(fp, "%s,%d", str,a);//把字符数组str的内容输到文件fp中去
fclose(fp);
}
system("PAUSE");
return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include<iostream>

#define STR_LEN 1024

int main()
{
int b=0;
char str2[STR_LEN] = {0};
FILE *fp = NULL;

fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("Cann't open the file!");
exit(1);
}
else
{
fscanf(fp,"%s%d",str2,&b);//把文件fp中的内容以字符串的形式存到字符数组str2中
printf("%s%d\n",str2,b);
fclose(fp);
}
system("PAUSE");
return 0;
}

上面的内容,输出结果总是不理想,请看看哪里有错。我用的DEV编译器,第一个程序是向文件输入,第二个是从文件到变量的传输。
第二个程序运行之后,变量a从文本传回来之后的值竟然变成1000了,请看看是哪里错了
展开
 我来答
山药山药王
推荐于2016-06-19 · TA获得超过887个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:0
展开全部
这个问题不好办,因为第一个程序里写入文件的时候字符串和数字之间以逗号分隔,那么第二个程序fscanf输入%s的时候是不会识别逗号的,它只会把hello,100作为一个整体字符串输入到str2中。因此str2就是hello,100。然后再输入%d的时候已经没有东西了,因此b仍然为0。所以最后输出hello,1000就是hello,100和最后那个0组成的。
要解决的话只能是把第一个程序里的
fprintf(fp, "%s,%d", str,a);
改成
fprintf(fp, "%s %d", str,a);
也就是文件中以空格分隔字符串和数字。

刚才发现还有一种解决方法。。。
那就是第一个程序不改,而把第二个程序的
fscanf(fp,"%s%d",str2,&b);
改成如下三行:
fscanf(fp,"%[^,]",str2);
fgetc(fp);
fscanf(fp,"%d",&b);
第一行的%[^,]是fscanf的格式控制,意为输入字符串并且以逗号为分隔符,就是说遇到逗号就结束且不读入这个逗号。因此读到的str2就是hello
第二行读入一个字符,就是那个逗号
第三行再读入一个数,就读入了100
这样就实现了以逗号分隔字符串和数字时,依然能够正确的读文件!
L_o_o_n_i_e
2010-06-22 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5092万
展开全部
fprintf(fp, "%s,%d", str,a); 输出有 逗号
改为 fprintf(fp, "%s %d", str,a); 空白

改为 fscanf(fp,"%s %d",str2,&b);// 空白

#include<iostream> C++ 的,不需要。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
narcissus002
2010-06-22
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式