2013-01-08 47 views
1

我对C++相当陌生,而且这是一项家庭作业。 我正在考虑一个switch语句,而不是我的函数中的if else语句。从文件流创建一个输出文件

我试图写入从输入文件流中读取的信息,在数据被处理后输出文件。

prgram应该从文件中读取信息,处理它,然后在控制台上显示数据并将结果写入输出文件,程序应该要求用户输入文件名以用于输入和输出文件。

我无法让我的程序创建一个文件。它适用于已经存在的文件。

请帮助我让我的程序创建一个文件,如果它不存在。

哦,这是在c + +

任何帮助将不胜感激。

我的代码:

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <string> 
#include <sstream> 

using namespace std; 

char getNumber(char l); 

int main() 
{ 
    string s1 = "D:\\Unisa\\Assignment_stuffs\\COS1512\\Assignment\\"; 
    string inFile, outFile; 

    cout << " Please enter the input filename: "; 
    cin >> inFile; 
    cout << "\nPlease enter the output filename: "; 
    cin >> outFile; 

    string inFileAdd = s1 + inFile; 
    string inFileAdd2 = s1 + outFile; 

    ifstream in_stream; 
    ofstream out_stream; 
    in_stream.open(inFileAdd.c_str(), ios::in); 
    if (in_stream.fail()) 
    { 
     cout << "Error!! Input file opening failed."; 
     exit(1); 
    } 
    out_stream.open(inFileAdd2.c_str(), ios::out); 
    if (out_stream.fail()) 
    { 
     cout << "Error!! Output file opening failed."; 
     exit(1); 
    } 

    char next = ' '; 
    string letter; 

      while (!in_stream.eof()) 
      { 
       in_stream.get(next); 
       while (next != '\n') 
       { 
         cout << next; 
         out_stream.put(next); 
         letter = letter + getNumber(next); 
         in_stream.get(next); 
       } 
       cout << " " + letter; 
       out_stream << " " + letter << endl; 

       letter = ""; 
       cout << endl; 
      } 


    in_stream.close(); 

    return 0; 
} 

char getNumber(char l) 
{ 
    if ((l == 'A') || (l == 'a') || (l == 'B') || (l == 'b') || (l == 'C') || (l == 'c')) 
    { 
      return '2'; 
    } 
    else if ((l == 'D') || (l == 'd') || (l == 'E') || (l == 'e') || (l == 'F') || (l == 'f')) 
    { 
      return '3'; 
    } 
    else if ((l == 'G') || (l == 'g') || (l == 'H') || (l == 'h') || (l == 'I') || (l == 'i')) 
    { 
      return '4'; 
    } 
    else if ((l == 'J') || (l == 'j') || (l == 'K') || (l == 'k') || (l == 'L') || (l == 'l')) 
    { 
      return '5'; 
    } 
    else if ((l == 'M') || (l == 'm') || (l == 'N') || (l == 'n') || (l == 'O') || (l == 'o')) 
    { 
      return '6'; 
    } 
    else if ((l == 'P') || (l == 'p') || (l == 'Q') || (l == 'q') || (l == 'R') || (l == 'r') || (l == 'S') || (l == 's')) 
    { 
      return '7'; 
    } 
    else if ((l == 'T') || (l == 't') || (l == 'U') || (l == 'u') || (l == 'V') || (l == 'v')) 
    { 
      return '8'; 
    } 
    else if ((l == 'W') || (l == 'w') || (l == 'X') || (l == 'x') || (l == 'Y') || (l == 'y') || (l == 'Z') || (l == 'z')) 
    { 
      return '9'; 
    } 
} 
+2

请问你的程序有适当的权限来创建在'd文件:\南非大学\ Assignment_stuffs \ COS1512 \ Assignment'?可以有权写入存在的文件,但不能创建新的文件。 – lcs

+2

对于ifstream和ofstream类,ios :: in和ios :: out会自动分别假设,因此您并不需要它们。 – SirDarius

+1

学习最小化代码并独立开发不同的代码是非常重要的。尝试编写*将写入新文件的最简单程序*。你要么自己发现问题,要么有一个我们可以运行的例子。 (我的钱在@millsj上。) – Beta

回答

1

做什么贝塔说和先创建一个最小文件打开和写程序。得到那个工作。然后,围绕这一点构建剩余的所需功能,编译和修复错误的每一步。如果你可以得到这个工作,可以为它添加一些你想要的功能。如果这不起作用,请查看您正在写入的目录的权限。这将编译在Visual Studio中,您可能需要包括在Linux/UNIX/Mac和其他库:

#include <fstream> 
int main() 
{ 
    std::ofstream file; 

    file.open("file.txt");  //open a file 

    file<<"Hello file\n";  //write to it 

    file.close();   //close it 
} 
相关问题