c++数据结构导引中的小问题
我在执行这段代码时。文件test3(我在与项目同目录下建立的一个测试文件,里面全是乱输入的字符)直接全部被读到了console,而没出现书上的测试结果。
/************************************************************** *本程序对读自磁盘的一个文件的文件行进行一些基本的文本编辑操作 *在编辑完成后,每一行都被写入到一个新文件当中,这个新文件的名 *字和输入文件的名字一样,但是最后加上一个".out"后缀名 *输入(键盘):文件名,编辑命令 *输出(文件):文本行 *输入(屏幕):编辑命令菜单,未编辑和编辑后的文本行 *输出(文件):编辑过的文本行 *************************************************************/#include <iostream>#include <fstream>#include <string>using namespace std;int main(void){ const char COMMAND_MENU[]= "Editing commands are: \n" "L:Determine the length of current line\n" "P str: Find posotion (counting from 0)of string str\n" "I str: Insert string str\n" "D p n: Delete n characters beginning at position p\n" "R str: Replace substring str with another string\n" "N :Get next line of text\n" "Q:Quit editing\n"; string inFileName, outFileName; cout<<"enter the name of the input file:"; getline(cin,inFileName); outFileName=inFileName; outFileName.append("out"); ifstream inFile(inFileName.data()); ofstream outFile(outFileName.c_str()); if(!inFile.is_open()||!outFile.is_open()) { cerr<<"error in open files"; exit(-1); } cout<<COMMAND_MENU<<endl <<"enter an editing command following each prompt >\n"; char command;//编辑命令 string line,//被编辑的文本行 str1,str2;//编辑中使用的串 int position,//一个串在文本行中的位置 numChars;//将被删除的字符数 getline(inFile,line); cout<<line<<endl; for(;;) { if(inFile.eof()) break;//Label A cout<<'>'; cin>>command; switch(toupper(command)) { case 'L': cout<<"Length ="<<line.length()<<endl; break; case 'P': cin.ignore(1); getline(cin,str1); position=line.find(str1); if(position!=string::npos) cout<<"Position is "<<1+position<<endl; else cout<<str1<<"not found\n"; break; case 'I': cin.ignore(1); getline(cin,str1); cout<<"Insert where?"; cin>>position; line.insert(position-1,str1); break; case 'D': cin>>position>>numChars; line.erase(position,numChars); break; case 'R': cin.ignore(1); getline(cin,str1); position=line.find(str1); if(position==string::npos) { cout<<str1<<"not found\n"; break; } cout<<"With what?"; getline(cin,str2); line.replace(position,str1.length(),str2); break; case 'N': outFile<<line<<endl; getline(inFile,line); cout<<"\n Next line: \n"; break; case 'Q': outFile<<line<<endl; for(;;) { getline(inFile,line); if(inFile.eof()) break; outFile<<line<<endl; } break; default: cout<<"\n *** Illegal command ***\n"; }// end of switch if(!inFile.eof()) cout<<line<<endl; } cout<<"\n *** Editing complete ***\n"; return 0;}
老感觉逻辑有问题。
[解决办法]
VC++6.0测试没问题