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

终于找到了答案。。。
转载: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[N];  
    int no[N];  
    int score[N];  
}m_item[M];  

struct w_item{  
    char name[N];  
    int no[N];  
    int score[N];  
}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;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值