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

终于找到了答案。。。
转载:http://blog.csdn.net/u012662688/article/details/51725491
读入数据类似字符串+数字+字符串+数字这样循环穿插混合的类型
比如下面的代码,main函数里有个while循环,无限刷菜单然后用户输入选项的那种,一开始使用freopen会导致缓冲区无限有数据,即无法继续输入选项了就
采用ifstream来解决,注释掉的是之前的会出问题的freopen版本的代码

#include  
#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
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<"\n";  

    //    scanf("%d %d %d",&s_num,&m_num,&w_num);  
      //  getchar();  
        for(int i=0;i//gets(m_item[i].name);  
            fin1>>m_item[i].name;  
            //scanf("%s",m_item[i].name);  
            cout<"\n";  
            //printf("%s",m_item[i].name);  
            for(int j=0;j>m_item[i].no[j];  
                //scanf("%d",&m_item[i].no[j]);  
                cout<"\n";  
                //printf("%d",m_item[i].no[j]);  
                m_item[i].score[j]=sc[j];  
            }  
        }  
    }  
    for(int i=0;i//gets(w_item[i].name);  
        fin1>>w_item[i].name;  
        //scanf("%s",w_item[i].name);  
        cout<"\n";  
        //printf("%s",w_item[i].name);  
        for(int j=0;j>w_item[i].no[j];  
            //scanf("%d",&w_item[i].no[j]);  
            cout<"\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<"\n";  
        cin>>option;  
        switch(option)  
        {  
        case 1:mod1();break;  
// 添加相应代码  
        case 0:  
            exit(0);  
        default:  
            cout<<"输入选项不正确!请重新输入!"<return 0;  
}  

你可能感兴趣的:(C++)