用c++从txt文件中读入数字的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c++从txt文件中读入数字的问题相关的知识,希望对你有一定的参考价值。

我打开一个文件,然后用while(!of.eof())of>>num;,那个文件本来是空的,什么都没有,空格也没有,但它还是会读一个很奇怪的数字到num里面去,这是为什么呢?怎么样才能让它在文件为空时跳过这个循环呢?盼高手解答

使用fopen,fscanf函数可以实现从txt文件当中读取数字。

1.fopen的函数原型:FILE * fopen(const char * path,const char * mode);
  fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
  r 以只读方式打开文件,该文件必须存在。
  r+ 以可读写方式打开文件,该文件必须存在。
  rb+ 读写打开一个二进制文件,允许读数据。
  rw+ 读写打开一个文本文件,允许读和写。
  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  wb 只写打开或新建一个二进制文件;只允许写数据。
  wb+ 读写打开或建立一个二进制文件,允许读和写。
  wt+ 读写打开或着建立一个文本文件;允许读写。
  at+ 读写打开一个文本文件,允许读或在文本末追加数据。
  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
    返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

2.例程:

#include<stdio.h>
#define F_PATH "d:\\\\myfile\\\\file.dat"
int c;
int main()
    FILE*fp=NULL;//需要注意
    fp=fopen(F_PATH,"r");
    if(NULL==fp) return -1;//要返回错误代码
    while(fscanf(fp,"%d",&c)!=EOF) printf("%d",c); //从文本中读入数字并在控制台打印出来
    fclose(fp);
    fp=NULL;//需要指向空,否则会指向原打开文件地址    
    return 0;

参考技术A 你那个奇怪的数字其实是 未初始化的num。
你把 num 初始化为 1 看看,是不是输出 1 了呢。

估计你的程序是这样子的:
int main()

ifstream in("c:\\abc.txt", ios::in);

int num; //未初始化

//cout << in.eof() << endl;
while(!in.eof())
in >> num;
cout << num << endl;


return 0;


至于判断是否空之后还是进入了循环,我的猜测是:
txt 文件本身有表示开始和结束的字符,这些标志的中间是正文内容。所以第一次判断为真。仅是猜测。

你可以直接这样用

while(in >> a)
cout << a << endl;

就不会出现问题了。本回答被提问者采纳
参考技术B 假设c盘里的beyond.txt里有如下数字12 34 90 100
程序就会跳过空格读出数字,代码如下:多加点分啊。。呵呵
#include<fstream.h>
#include<iostream.h>
int main()

int num=0;
ifstream in("c:\\beyond.txt",ios::out);
if(!in)

cout<<"file open failed"<<endl;

while(in.good())

in>>num;
cout<<num<<" ";

cout<<endl;
return 0;
参考技术C 如果不是num初始化的问题:
你先看看它是否进入了while里面,
虽然eof可以判断文件是否读到末尾,但它不知道是否现在读取的是否是最后一个值,所以需要判断两次 这是读文件时经常要用到的
while(of.eof()==0)

if(of.eof()!=0)
break;
of>>num;

C++的TXT的文件的输入和输出

我想输入input.txt这个文件,引用其中的数据(就是一个单一的数字),经过fun的运算(就是算一个数的平方),把结果数字输出到output.txt,不知道怎么弄,下面是我自己乱编的一段代码,求高手修改下。我会多给分的,请大家帮忙下。
#include<iostream>
#include<fstream>
using namespace std;
int fun();
int fun(int n)
int s;
s=n*n;

int main()
int n;

cout<<"Please input 1 number:"<<endl;
cin>>n;
ifstream in_file("d:\\input.txt");

ofstream out_file("d:\\output.txt");
cout<<"the square of n is"<<fun(n)<<endl;



使用fopen,fscanf函数可以实现从txt文件当中读取内容,进行简单操作。

1.fopen的函数原型:FILE * fopen(const char * path,const char * mode);
  fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
  r 以只读方式打开文件,该文件必须存在。
  r+ 以可读写方式打开文件,该文件必须存在。
  rb+ 读写打开一个二进制文件,允许读数据。
  rw+ 读写打开一个文本文件,允许读和写。
  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  wb 只写打开或新建一个二进制文件;只允许写数据。
  wb+ 读写打开或建立一个二进制文件,允许读和写。
  wt+ 读写打开或着建立一个文本文件;允许读写。
  at+ 读写打开一个文本文件,允许读或在文本末追加数据。
  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
    返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。


2.例程:

#include<stdio.h>
#define F_PATH "d:\\\\myfile\\\\file.dat"
char c;
int main()
    FILE*fp=NULL;//需要注意
    fp=fopen(F_PATH,"r");
    if(NULL==fp) return -1;//要返回错误代码
    while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来
    fclose(fp);
    fp=NULL;//需要指向空,否则会指向原打开文件地址    
    return 0;

参考技术A 主程序开头加freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
其它与没文件时一样追问

按你说的成功了,但是“r”和“w”是什么意思,我是初学者,不大懂,能解释下吗?

追答

就是固定的,表示read和write,无论什么文件名都这样写,只要改一下前面的文件名。

本回答被提问者采纳
参考技术B 如果用freopen 参见absmallsmall
如果用fstream
注意fstream是定义了一个文件流 所以你要用定义的流进行读入输出
例如:ifstream fin("in.txt");
fin>>n;
ofstream fout("out.txt");
fout<<fun(n);

以上是关于用c++从txt文件中读入数字的问题的主要内容,如果未能解决你的问题,请参考以下文章

C++的TXT的文件的输入和输出

怎样用C语言从txt文件中读入数据?

C和C++的文件操作

以文件名作为列标题将多个 *.txt 文件读入 Pandas Dataframe

c++,从txt文件中获取电话号码

python 从文件a.txt中读入一段英文,把它进行加密,保存到文件b.txt中?