文件操作

C指针文件操作

文件操作的基本方式

(w+/a+/r+)

#include<iostream>
using namespace std;
file *fp=fopen("in.txt","a+")//以a+方式打开文件
file *fp1=fopen("out.txt","a+")//以a+方式打开文件
while(fscanf(fp,"%s",str) != EOF){
          fprintf(fp1,"%s\n",str);
}
char str[][];
// 当一个字符都没有读到时,fgets()返回NULL
while(fgets(str,1024,fp)){
    fputs(str,fp);
}
char ch = fgetc(fp); // fgetc(*fp)函数返回int值
// 如果从标准输入读取一个字符,可以用getchar();
fputc(ch,fp1);
fclose(fp);//在使用完文件指针后及时关闭文件防止内存泄漏
fclose(fp1);

补充说明:
gets(s)是从标准输入输出里读取数据(不关心s的大小)。容易导致内存泄漏。C11标准已经正式废除。
如果必须使用fgets的话,可以考虑尝试使用fgets(buf,maxn,stdin)
本人目前最常使用的文件读取方式:

getline(cin,str) 从标准输入流读取一行字符
除上面的这种方式之外,还有输入输出重定向(将标准输入输出流重定向至文件流)

输入输出的重定向

freopen("in.txt","r",stdin);//输入输出的重定向
//更常见的用法是用于本地实现文件输入输出,提交到online_judge时采用标准输入输出,下面代码是该用法的示例
//如果LOCAL宏已被定义或者编译选项包含LOCAL(gcc 1.cpp -o test -DLOCAL),
//则执行输入输出重定向。否则为标准输入输出
#ifdef LOCAL
      freopen("in.txt","r",stdin);//输入输出的重定向s
#endif

scanf("%s",buf);
代码示例
#define LOCAL
int main(){
    #ifdef LOCAL
        freopen("in.txt","r",stdin);//输入输出的重定向
    #endif
    int s;
    while(scanf("%d",&s) != EOF){
        cout<<s<<endl;
    }
    fclose(stdin);
    return 0;
}

c++文件输入输出流操作

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
	int a[10];
	ifstream in("读入.txt");
	for(int i=0;i<10;i++)
		in>>a[i];
	for(int i=0;i<10;i++)
		cout<<a[i]<<endl;
	ofstream out("输出.txt");
	out<<"完全ojbk";
	in.close();
	out.close();
	//程序使用cin.get()函数可以简单地暂停屏幕直到按回车键,并且不需要存储字符
	cin.get();
}


将输入的一组数据作为int类型读取

示例程序作用说明:
从标准stdin中输入一列数字例如:12 22 33 43 11
示例程序会依次将12、22、33、43、11读入变量x;(x1 = 12,x2 = 22…)
然后依次计算sum = x1 + x2 + x3 + x4 + x5;

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
        string line
        while(cin >> line){
                int sum = 0,x;
                stringstream ss(line);
                while(ss >> x) sum += x;
                cout << sum << "\n";
        }
        return 0;
}

cin,getline与换行符的关系

cin在读取输入的时候,会跳过换行符,也就是换行符还停留在缓冲区中,遇到空白字符就停止。
getline()读取输入的时候,遇到换行符就会停止,但是换行符不会停留在缓冲区中。因此getline()不是跳过换行符而是直接舍弃换行符
gets()也是遇到换行符就会停止,但是会跳过换行符。可搭配ch=getchar();

int main(){
     string str;
     cin>>str;
     cout<<str<<endl;
     char ch = getchar(); //吸收cin跳过的换行符
     cout<<(int)ch<<endl;
     while(getline(cin,str)){
         cout<<str<<endl;
     }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值