您的位置:首页 > 编程语言 > C语言/C++

C++ ifstream 从文件中 字符串和数字混合输入

2017-08-15 20:47 471 查看
终于找到了答案。。。

转载:http://blog.csdn.net/u012662688/article/details/51725491

读入数据类似字符串+数字+字符串+数字这样循环穿插混合的类型

比如下面的代码,main函数里有个while循环,无限刷菜单然后用户输入选项的那种,一开始使用freopen会导致缓冲区无限有数据,即无法继续输入选项了就

采用ifstream来解决,注释掉的是之前的会出问题的freopen版本的代码

#include<bits/stdc++.h>
#define N 50
#define M 50
#define W 50
#define Pi acos(-1.0)
#define clr(a) memset(a,0,sizeof a)
#define space(a) for(int i=0;i<a;i++)printf(" ");
using namespace std;

int m_num,w_num,s_num;//

struct m_item{
char name
;
int no
;
int score
;
}m_item[M];

struct w_item{
char name
;
int no
;
int score
;
}w_item[M];
int sc[5]={7,5,3,2,1};

int mod1(){
ifstream fin1("item.txt");
//freopen("item.txt","r",stdin);
while(fin1>>s_num>>m_num>>w_num){
cout<<s_num<<m_num<<w_num<<"\n";

//    scanf("%d %d %d",&s_num,&m_num,&w_num);
//  getchar();
for(int i=0;i<m_num;i++){
//gets(m_item[i].name);
fin1>>m_item[i].name;
//scanf("%s",m_item[i].name);
cout<<m_item[i].name<<"\n";
//printf("%s",m_item[i].name);
for(int j=0;j<s_num;j++){
fin1>>m_item[i].no[j];
//scanf("%d",&m_item[i].no[j]);
cout<<m_item[i].no[j]<<"\n";
//printf("%d",m_item[i].no[j]);
m_item[i].score[j]=sc[j];
}
}
}
for(int i=0;i<w_num;i++){
//gets(w_item[i].name);
fin1>>w_item[i].name;
//scanf("%s",w_item[i].name);
cout<<w_item[i].name<<"\n";
//printf("%s",w_item[i].name);
for(int j=0;j<s_num;j++){
fin1>>w_item[i].no[j];
//scanf("%d",&w_item[i].no[j]);
cout<<w_item[i].no[j]<<"\n";
//printf("%d",w_item[i].no[j]);
w_item[i].score[j]=sc[j];
}
//getchar();
}
fin1.close();
return 0;
}

int main(){
int option;                      // 系统功能菜单选项
int cnt1=0;
while(true){
// 输出系统功能提示菜单
cout<<option<<"\n";
cin>>option;
switch(option)
{
case 1:mod1();break;
// 添加相应代码
case 0:
exit(0);
default:
cout<<"输入选项不正确!请重新输入!"<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: