用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;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-14
你那个奇怪的数字其实是 未初始化的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;

就不会出现问题了。本回答被提问者采纳
第2个回答  2009-03-28
假设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;
}
第3个回答  2009-03-28
如果不是num初始化的问题:
你先看看它是否进入了while里面,
虽然eof可以判断文件是否读到末尾,但它不知道是否现在读取的是否是最后一个值,所以需要判断两次 这是读文件时经常要用到的
while(of.eof()==0)
{
if(of.eof()!=0)
break;
of>>num;
}

c++关于从文件读取数字的问题
用ifstream读文件,读到空格,tab键回车会结束,因此要读完整个文件,需要用一个循环来读取,判断是否读完用eof()函数来判断。拿你的例子:\/\/定义文件流 ifstream a;\/\/定义保存文件字符的变量 int num;\/\/打开文件,这里要注意文件的路径 a.Open(文件名.txt);\/\/读取23(这里只读到23。上面说了,...

C++编程,从TXT文档中读取数字
include <iostream>#include <string>#include <vector>#include<fstream>#include <sstream>using namespace std;\/\/ 判断一个字符串是否为一个数字,如果是返回它bool JudgeNum(string str,int& iTmp){ bool bNum = true; string::size_type szSize = str.size(); for (int i=0;i<szSize;...

读取文本文件中的神秘数据(C++)
2. Linux环境:使用编译命令生成可执行文件,并将positions.txt文件放置在可执行文件同一目录下执行。学生反馈:学生在完成作业后,表示通过本实践学习到了如何从文本文件中读取数据,以及如何根据数据格式进行特定字符的输出,从而实现预期的图形显示。此过程有助于提高C++编程实践能力,增强对文件操作和数据结...

如何用C++读取取txt文档中的数据,数据中间用逗号分开
include <iostream> include<fstream> using namespace std;int main(void){ ifstream cin("aaa.txt"); \/\/把输入流定位到aaa.txt文件 double data[1000]; \/\/你的数组 int n=0;char h;while(cin>>data[n]>>h) \/\/输入,数据存在data数组中 { n++;} n++;while(n--){ cout<<...

请问C++ 如何从txt文件中读取数据,然后保存在类的数组中?
要声明一个信息(学生)类的数组然后再读文件,读文件大概代码如下:ifstream File_read;while(!File_read.eof()){ File_read>>data[i].num>>data[i].name>>data[i].score;i++;} 数组data是的类型是信息类。自己试试。

c++读取.txt文件从最后一行往前读数据
文件操作指针,只能够从前往后。不能够倒着读。可以把文件内容挨着读入到字符数组缓存当中,然后倒着操作即可。1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数...

C++ 从TXT文件中读取数据存到数组中??你是怎么解决的谢谢
文件中读取数据存到数组中的命令:include <fstream> void main()nclude <stdio.h> include <math.h> define MaxLength { int a[10];ifstream fin("D:\/我的输入文件.txt");for(int i=0;i<10;i++)fin>>a[i];for(int i=0;i<10;i++)cout<<a[i]<<endl;ofstream fout("D:\/我的...

用c++语言读取txt文件的列数据
这句是读取TXT到数组,count是从0到3读取四行: 1 inFile>>n1[count]>>n2[count]; 这句是显示数组内容到屏幕,i 是从0到3显示四行: 1 cout<<setw(3)<<n1[i]<<setw(9)<<n2[i]<<endl; 明白了吗? 追问 inFile>>n1[count]>>n2[count];这句就分别把两个数存到两个数组里了?那我应该明白了,万分...

在C++中,如何读取一个txt文件,或向txt文件中写入数据 ?
一、写入文件#include <fstream>using namespace std;void main(){ofstream in;in.open("com.txt",ios::trunc); \/\/ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建int i;char a='a';for(i=1;i<=26;i++)\/\/将26个数字及英文字母写入文件{if(i<10){in<<"0"<<i<...

C++如何一行一行读取txt文件中数据并存入相应数组?
循环读入。c 程序 可作为 c++程序。include<iostream> include<fstream> using namespace std;include <stdio.h> main(){ int x[5],y[5];int i;FILE *fp;fp=fopen("sk.txt","r");for (i=0;i<5;i++) fscanf(fp,"%d",&x[i]);for (i=0;i<5;i++) fscanf(fp,"%d",&y[i...

相似回答