【困惑了我一天的一个小问题】无法输入文件流是怎么回事

BillySun0624 2014-01-22 06:21:35
程序作用:是将一个文件数据读入到向量中,再判断向量中的元素有多少个两两相等的数。
程序是书上的程序,应该没有错。
文件是跟程序保存在同一路径也没有错。
然后编译起来就是一直光标在闪,连“press any key。。”都不出来。

下面是代码:
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//----------------------------------------------
void main()
{
ifstream in("aaa.txt");
vector<int> s;
for(int a;in>>a; ) s.push_back(a);
int day=0;
for(int i=0;i<s.size()-1 ;i++)
for(int j=i+1;j<s.size();j++)
if(s[i]==s[j]) day++;
cout<<day<<endl;
}//=============================================
...全文
195 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2014-01-24
  • 打赏
  • 举报
回复
引用 10 楼 u013075531 的回复:
[quote=引用 9 楼 jianwen0529 的回复:] for(int a;in>>a; ) s.push_back(a); 这个终止条件算什么? in>>a返回的应该是成功或者失败,勉强说相当于true or false吧 要么死循环要么根本就不执行循环,所以你根本就没读取到字符串! 后面的for更是死循环...
in>>a不是从aaa.txt里面读取出一个整数,赋给a吗??直到整数读完就跳出循环呀??[/quote] 不好意思,是我说错了! 你加个判断打开文件时是否错误,或者把文件路径改为绝对路径试试! 还有你光标闪是因为s中没有数据size()等于0,减1得出极大的正数(应该是类型的隐式转换,size()返回的是(size_type)无符号(长)整形?)所以循环需要很久很久 解决方案: 1.判断文件是否打开成功,否则返回 2.判断vector是否为空,是则返回 3.包含vector::size()循环最好使用如 for(UINT i = 0; i < s.size(); i++)
幻夢之葉 2014-01-24
  • 打赏
  • 举报
回复
引用 14 楼 u013075531 的回复:
[quote=引用 13 楼 jianwen0529 的回复:] [quote=引用 10 楼 u013075531 的回复:] [quote=引用 9 楼 jianwen0529 的回复:] for(int a;in>>a; ) s.push_back(a); 这个终止条件算什么? in>>a返回的应该是成功或者失败,勉强说相当于true or false吧 要么死循环要么根本就不执行循环,所以你根本就没读取到字符串! 后面的for更是死循环...
in>>a不是从aaa.txt里面读取出一个整数,赋给a吗??直到整数读完就跳出循环呀??[/quote] 为什么文件会打开不成功呢?问题会出在哪里,该怎么解决呢? 不好意思,是我说错了! 你加个判断打开文件时是否错误,或者把文件路径改为绝对路径试试! 还有你光标闪是因为s中没有数据size()等于0,减1得出极大的正数(应该是类型的隐式转换,size()返回的是(size_type)无符号(长)整形?)所以循环需要很久很久 解决方案: 1.判断文件是否打开成功,否则返回 2.判断vector是否为空,是则返回 3.包含vector::size()循环最好使用如 for(UINT i = 0; i < s.size(); i++) [/quote] ifstream in("D:\\cpp_projects\\file_4\\aaa.txt");改成用绝对路径之后,依然是打开文件错误。为什么打开文件会出错,好纠结。路径也没错的。[/quote] ifstream inputStream("file.txt",ios::in); if( !inputStream ) { cerr << "Error opening input stream" << endl; return; } 自己新建一个txt文件,里面随意写几个数据,再次测试是程序的问题,还是你那个文件的问题
mujiok2003 2014-01-24
  • 打赏
  • 举报
回复
引用 15 楼 u013075531 的回复:
[quote=引用 12 楼 mujiok2003 的回复:] [quote=引用 11 楼 u013075531 的回复:] for(int a;in>>a; ) s.push_back(a);[/color] 这句语句是从aaa.txt里面依次读取出一个个整数,赋给a,然后再将a添加到s向量的末尾,直到整数读完为止。那么s为什么s.size()会为0呢。我的理解有错吗??
文件打开成功了吗? "in>>a;"成功了吗?[/quote] 哦,打开文件出错了。 为什么打开文件会出错呢?文件保存在跟程序同一路径下的,应该不会错呀。而且试过用绝对路径,也还是一样打开文件出错。 这该怎么解决呢?[/quote] 文件与程序放在同一路径,用相对路径,双击运行程序. 试一试.
BillySun0624 2014-01-24
  • 打赏
  • 举报
回复
引用 12 楼 mujiok2003 的回复:
[quote=引用 11 楼 u013075531 的回复:] for(int a;in>>a; ) s.push_back(a);[/color] 这句语句是从aaa.txt里面依次读取出一个个整数,赋给a,然后再将a添加到s向量的末尾,直到整数读完为止。那么s为什么s.size()会为0呢。我的理解有错吗??
文件打开成功了吗? "in>>a;"成功了吗?[/quote] 哦,打开文件出错了。 为什么打开文件会出错呢?文件保存在跟程序同一路径下的,应该不会错呀。而且试过用绝对路径,也还是一样打开文件出错。 这该怎么解决呢?
BillySun0624 2014-01-24
  • 打赏
  • 举报
回复
引用 13 楼 jianwen0529 的回复:
[quote=引用 10 楼 u013075531 的回复:] [quote=引用 9 楼 jianwen0529 的回复:] for(int a;in>>a; ) s.push_back(a); 这个终止条件算什么? in>>a返回的应该是成功或者失败,勉强说相当于true or false吧 要么死循环要么根本就不执行循环,所以你根本就没读取到字符串! 后面的for更是死循环...
in>>a不是从aaa.txt里面读取出一个整数,赋给a吗??直到整数读完就跳出循环呀??[/quote] 为什么文件会打开不成功呢?问题会出在哪里,该怎么解决呢? 不好意思,是我说错了! 你加个判断打开文件时是否错误,或者把文件路径改为绝对路径试试! 还有你光标闪是因为s中没有数据size()等于0,减1得出极大的正数(应该是类型的隐式转换,size()返回的是(size_type)无符号(长)整形?)所以循环需要很久很久 解决方案: 1.判断文件是否打开成功,否则返回 2.判断vector是否为空,是则返回 3.包含vector::size()循环最好使用如 for(UINT i = 0; i < s.size(); i++) [/quote] ifstream in("D:\\cpp_projects\\file_4\\aaa.txt");改成用绝对路径之后,依然是打开文件错误。为什么打开文件会出错,好纠结。路径也没错的。
BillySun0624 2014-01-23
  • 打赏
  • 举报
回复
引用 5 楼 qazxlf 的回复:
[quote=引用 4 楼 mujiok2003 的回复:]
for(int a;in>>a; ) s.push_back(a);
//文件中没有int
for(int i=0;i<s.size()-1 ;i++) //s.size() 为0
这显然不是你要的.
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//----------------------------------------------
int main()
{
ifstream in("aaa.txt");
vector<int> s;
for(int a;in>>a; ) s.push_back(a);
if(s.empty()) return 0;
int day=0;
for(int i=0;i<s.size()-1 ;i++)
for(int j=i+1;j<s.size();j++)
if(s[i]==s[j]) day++;
cout<<day<<endl;
return 0;
}//=============================================
这个说对了[/quote] 什么意思呀?没理解。。大神,给我解释下好吗
BillySun0624 2014-01-23
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
for(int a;in>>a; ) s.push_back(a);
//文件中没有int
for(int i=0;i<s.size()-1 ;i++) //s.size() 为0
这显然不是你要的.
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//----------------------------------------------
int main()
{
ifstream in("aaa.txt");
vector<int> s;
for(int a;in>>a; ) s.push_back(a);
if(s.empty()) return 0;
int day=0;
for(int i=0;i<s.size()-1 ;i++)
for(int j=i+1;j<s.size();j++)
if(s[i]==s[j]) day++;
cout<<day<<endl;
return 0;
}//=============================================
“文件中没有int”,“s.size() 为0”??什么意思,有点明白了,又有点不明白。大神,你再讲清楚点好吗,我才刚学c++不到一个礼拜。
Nets9527 2014-01-23
  • 打赏
  • 举报
回复
引用 4 楼 mujiok2003 的回复:
for(int a;in>>a; ) s.push_back(a);
//文件中没有int
for(int i=0;i<s.size()-1 ;i++) //s.size() 为0
这显然不是你要的.
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//----------------------------------------------
int main()
{
ifstream in("aaa.txt");
vector<int> s;
for(int a;in>>a; ) s.push_back(a);
if(s.empty()) return 0;
int day=0;
for(int i=0;i<s.size()-1 ;i++)
for(int j=i+1;j<s.size();j++)
if(s[i]==s[j]) day++;
cout<<day<<endl;
return 0;
}//=============================================
这个说对了
mujiok2003 2014-01-23
  • 打赏
  • 举报
回复
引用 11 楼 u013075531 的回复:
for(int a;in>>a; ) s.push_back(a);[/color] 这句语句是从aaa.txt里面依次读取出一个个整数,赋给a,然后再将a添加到s向量的末尾,直到整数读完为止。那么s为什么s.size()会为0呢。我的理解有错吗??
文件打开成功了吗? "in>>a;"成功了吗?
BillySun0624 2014-01-23
  • 打赏
  • 举报
回复
引用 8 楼 mujiok2003 的回复:
[quote=引用 6 楼 u013075531 的回复:] “文件中没有int”,“s.size() 为0”??什么意思,有点明白了,又有点不明白。大神,你再讲清楚点好吗,我才刚学c++不到一个礼拜。
自己分析一下下面的程序.
#include <stdio.h>

int main()
{
  int i = 0;
  unsigned int sz = 0;
  // 0 < -1 显然不应该成立. 提示:这和c/C++算术运算的类型转换有关,希望你自己能找到答案
  if( i < sz -1) 
  {
    puts("成立");
  }
  else 
  {
   puts("不成立");
  } 
  return 0;
}
//成立
[/quote] 我不明白为什么s.size()会为0??? for(int a;in>>a; ) s.push_back(a); 这句语句是从aaa.txt里面依次读取出一个个整数,赋给a,然后再将a添加到s向量的末尾,直到整数读完为止。那么s为什么s.size()会为0呢。我的理解有错吗??
BillySun0624 2014-01-23
  • 打赏
  • 举报
回复
引用 9 楼 jianwen0529 的回复:
for(int a;in>>a; ) s.push_back(a); 这个终止条件算什么? in>>a返回的应该是成功或者失败,勉强说相当于true or false吧 要么死循环要么根本就不执行循环,所以你根本就没读取到字符串! 后面的for更是死循环...
in>>a不是从aaa.txt里面读取出一个整数,赋给a吗??直到整数读完就跳出循环呀??
幻夢之葉 2014-01-23
  • 打赏
  • 举报
回复
for(int a;in>>a; ) s.push_back(a); 这个终止条件算什么? in>>a返回的应该是成功或者失败,勉强说相当于true or false吧 要么死循环要么根本就不执行循环,所以你根本就没读取到字符串! 后面的for更是死循环...
mujiok2003 2014-01-23
  • 打赏
  • 举报
回复
引用 6 楼 u013075531 的回复:
“文件中没有int”,“s.size() 为0”??什么意思,有点明白了,又有点不明白。大神,你再讲清楚点好吗,我才刚学c++不到一个礼拜。
自己分析一下下面的程序.
#include <stdio.h>

int main()
{
  int i = 0;
  unsigned int sz = 0;
  // 0 < -1 显然不应该成立. 提示:这和c/C++算术运算的类型转换有关,希望你自己能找到答案
  if( i < sz -1) 
  {
    puts("成立");
  }
  else 
  {
   puts("不成立");
  } 
  return 0;
}
//成立
mujiok2003 2014-01-22
  • 打赏
  • 举报
回复
for(int a;in>>a; ) s.push_back(a);
//文件中没有int
for(int i=0;i<s.size()-1 ;i++) //s.size() 为0
这显然不是你要的.
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
//----------------------------------------------
int main()
{
ifstream in("aaa.txt");
vector<int> s;
for(int a;in>>a; ) s.push_back(a);
if(s.empty()) return 0;
int day=0;
for(int i=0;i<s.size()-1 ;i++)
for(int j=i+1;j<s.size();j++)
if(s[i]==s[j]) day++;
cout<<day<<endl;
return 0;
}//=============================================
BillySun0624 2014-01-22
  • 打赏
  • 举报
回复
引用 1 楼 derekrose 的回复:
什么编译器?
vc++6.0 vs2010 都用过,都是一样的结果
BillySun0624 2014-01-22
  • 打赏
  • 举报
回复
vc++6.0 vs2010 都用过,都是一样的结果
derekrose 2014-01-22
  • 打赏
  • 举报
回复
什么编译器?

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧