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了,请看看是哪里错了 展开
#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了,请看看是哪里错了 展开
3个回答
展开全部
这个问题不好办,因为第一个程序里写入文件的时候字符串和数字之间以逗号分隔,那么第二个程序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
这样就实现了以逗号分隔字符串和数字时,依然能够正确的读文件!
要解决的话只能是把第一个程序里的
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
这样就实现了以逗号分隔字符串和数字时,依然能够正确的读文件!
展开全部
fprintf(fp, "%s,%d", str,a); 输出有 逗号
改为 fprintf(fp, "%s %d", str,a); 空白
改为 fscanf(fp,"%s %d",str2,&b);// 空白
#include<iostream> C++ 的,不需要。
改为 fprintf(fp, "%s %d", str,a); 空白
改为 fscanf(fp,"%s %d",str2,&b);// 空白
#include<iostream> C++ 的,不需要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#include <stdlib.h>
#include<iostream>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询