文件管理-每行输出一个单词
C++- File managing - Output one word per line
我是新来的,所以如果我做错了什么请原谅我。我有点着急,我甚至不能翻译我在这段代码中写的东西。我创建文件,它工作,我添加新的记录,它工作,我也打印所有的文件,它工作。所以,问题是void cl()。我给了一个教室作为输入,它应该给我教室里的学生作为输出,问题是这不起作用,实际上有时它会多次打印一个学生和同一个教室。我该怎么办?请记住,我没有做过太多关于文件,所以如果有一个简单的方法来解决这个问题,我更喜欢它,但我接受所有可能的帮助。谢谢!编辑:我也忘了说我有一些奇怪的警告信息,如"[警告]未知转义序列:'D'"和S。这适用于每一个空白,我认为这是关于文件名,但这是一个问题吗?
#include <iostream>
#include <string>
#include <cstdlib>
#include<fstream>
using namespace std;
string nome, classe;
ofstream fout;
ifstream fin;
void crea(){ /*this is the file creation*/
cout<<"-----------------------"<<endl;
char risp;
fout.open("C:Documentistudenti.txt",ios::out);
do{
cout<<"Inserisci nome: "<<endl;
cin>>nome;
cout<<"Inserisci classe: "<<endl;
cin>>classe;
fout<<nome<<" "<<classe<<endl;
cout<<"un altro record (s/n): "<<endl;
cin>>risp;
}while(risp=='s');
fout.close();
cout<<"--------------------------------"<<endl;
}
void aggiungi(){ /*this adds new records to the file*/
cout<<"----------------------"<<endl;
char risp;
fout.open("C:Documentistudenti.txt", ios::out | ios::app);
do{
cout<<"Inserisci nome: "<<endl;
cin>>nome;
cout<<"Inserisci classe: "<<endl;
cin>>classe;
fout<<nome<<" "<<classe<<endl;
cout<<"Un altro record (s/n)?"<<endl;
cin>>risp;
}while(risp=='s');
fout.close();
cout<<"-------------------------"<<endl;
}
void visualizza(){ /*this prints all the file on the video*/
cout<<"--------------------------"<<endl;
fin.open("C:Documentistudenti.txt",ios::in);
if(!fin)
cout<<"File inesistente, impossibile procedere. "<<endl;
else{
fin>>nome>>classe;
while(!fin.eof()){
cout<<nome<<" "<<classe<<endl;
fin>>nome>>classe;
}
cout<<"----------------------------"<<endl;
fin.close();
}
}
void cl(){ /*this SHOULD work like i say in the description*/
cout<<"--------------------------"<<endl;
string cla;
fin.open("C:DocumentiStudenti.txt",ios::in);
if(!fin)
cout<<"File inesistente, impossibile procedere. "<<endl;
else{
cout<<"Inseire classe per sapere i nomi degli studenti: "<<endl;
cin>>cla;
cout<<"**********************************"<<endl;
fin>>nome;
while(!fin.eof()){
if(cla==classe){
cout<<nome<<endl;
fin>>nome;
}
}------------------"<<endl;
}
}
int esci(){ /*this is the exit status*/
char risp;
cout<<"Hai selezionato l'opzione 'esci', sei sicuro? s/n "<<endl;
cin>>risp;
}
int main(){ /*main with menu*/
int n;
do{
cout<<"Scegliere cosa fare: "<<endl;
cout<<"1) Creare il file con classi e nomi degli studenti. "<<endl;
cout<<"2) Aggiungere ulteriori studenti."<<endl;
cout<<"3) Visualizzare classe e nome di ogni studente. "<<endl;
cout<<"4) Visualizzare tutti gli studenti di una data classe. "<<endl;
cout<<"5) Esci. "<<endl;
cin>>n;
switch(n){
case 1:
crea();
break;
case 2:
aggiungi();
break;
case 3:
visualizza();
break;
case 4:
cl();
break;
case 5:
esci();
break;
default:
system("pause");
return 0;
}
}while(n!=5);
}
根据我的解释,你的文件以这种格式存储信息:_
nome1 classe1
nome2 classe2
…
…
…
由于file从流中读取数据,它将提取流中可用的下一个字符串。在您的代码中,没有从文件中读取类,并且将与类对应的文本输入到name中,这解释了荒谬的输出。此外,在更新名称时,您应该在if部分之外进行操作,因为无论类是否匹配类,在任何情况下都必须读取文件。看看这段代码:-
void cl(){
cout<<"--------------------------"<<endl;
string cla;
fin.open("C:DocumentiStudenti.txt",ios::in);
if(!fin)
cout<<"File inesistente, impossibile procedere. "<<endl;
else{
cout<<"Inseire classe per sapere i nomi degli studenti: "<<endl;
cin>>cla;
cout<<"**********************************"<<endl;
while(!fin.eof()){
fin>>nome>>classe;//change here
if(cla==classe){
cout<<nome<<endl;
}
}------------------"<<endl;
}
相关文章:
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 如何检查流中文件的下一个单词是否为 alpha?
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 计算一个单词在映射中出现的次数 - 使用 transform() - 调用不匹配
- 如何将一个单词拆分成字母,并将它们放入一个无序的列表/集合中
- 将字符串中的单个单词替换为另一个单词
- 如何插入一个单词并将字母放在2D数组中的不同索引中
- C++ ifstream 只读一个单词的数量
- 我如何计算一个单词在数组中重复的次数
- 如何将 c 字符串转换为指针数组,其中每个指针都是 char 数组中的一个单词
- 将 C++ 类属性与分号前面的最后一个单词对齐;在 emacs 中
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 我如何在一串随机生成的字母I C 中查找一个单词
- 在字符串中找到最后一个单词
- C++ 输出在读取文本文件时跳过最后一个单词
- 我如何将句子分成一个单词
- 在向量中通过一个单词查找行
- 'Try This'矢量在示例词典中哔哔一个单词。编程原理与实践
- 我怎样才能从字符串中得到一个单词
- 如何将文本(诗歌)拆分为行(字符串/字符[])并查找每个行的最后一个单词