2010-12-13 10 views
0

C'est ce que j'ai, ce programme fonctionne correctement, le seul problème que j'ai est qu'il ne sauvera pas la phrase appropriée dans File3.txt. J'ai inclus tout le programme pour comprendre, qu'est-ce que je ne fais pas correctement qui empêche la phrase sous l'option «r» de ne pas sauver? Merci.Comment enregistrer une phrase dans un fichier texte en C++?

void ascii (int number); 
bool raffle (int number); 
const int cArray=5; 




int main() 
{  

    int value; 

    char option; 

while (1) 
{ 


    cout <<"Enter a positive integer number: " <<endl; 
    cin >>value; 
    cout <<endl; 


    cout <<"A[scii]" "\t\tR[affle]" "\t\tE[xit]" <<endl; 
    cout <<"Please select an option: " <<endl; 
    cin >>option; 
    cout<<endl; 

    switch (option) 
    { 
     case 'a': 
     case 'A': 

      ascii(value); 
      break; 

     case 'r': 
     case 'R': 
      ofstream outfile("G:/File3.txt", ios::out); 
      if(!outfile) 
      { 
       cout<<"File could not be opened"<<endl; 
       exit(1); 
      } 
      if (raffle(value)==1) 
      { 
       outfile<<"The number "<<value<<"is present in the array."<<endl; 
      } 
      else 
      { 
       outfile<<"The number "<<value<<"is not present in the array."<<endl; 
      } 
      outfile.close(); 
      break; 

     case 'e': 
     case 'E': 

      return 0; 
      break; 


    } 
} 
} 


void ascii (int value) 
{ 

    if (48 <= value && value <= 57) 
    { 
     cout <<"The number you have entered corresponds to a digit in the ASCII table." <<endl; 
    } 
    else if(65 <= value && value <= 90) 
    { 
     cout <<"The number you have entered corresponds to an uppercase letter in the ASCII table." <<endl; 
    } 
    else if (97 <= value && value <= 122) 
    { 
     cout <<"The number you have entered corresponds to a lowercase letter in the ASCII table." <<endl; 
    } 
    else 
    { 
     cout <<"The number you have entered corresponds to none of the above." << endl; 
    } 

} 

bool raffle (int value) 
{ 
    int random[cArray]; 
    srand(time(NULL)); 
    for (int i=0; i<5; i++) 
    { 
     random[i]= 0+rand()%(100+1-0); 
     cout<<random[i]<<" "<<endl; 
    } 

    for (int j=0; j<5; j++) 
    { 
     if (value == random[j]) 
     { 
      cout << "\n" <<j<<endl; 

      return true; 
     } 
    } 
      cout << "Number not present."<<endl; 
      return false; 



} 
+0

Avez-vous confirmé que le code arrive au point où vous ouvrez le fichier? Avez-vous confirmé que –

+0

Il n'y a rien dans le fichier, et le fichier existe, ce que je suis censé faire est de mettre une de ces commandes dans le fichier. le nombre choisi est en fait présent dans le tableau, alors cette phrase est censée être placée, ect ect si ce n'est pas le cas Suis-je censé ouvrir le fichier d'abord pour qu'il soit mis en place puis il sera imprimé dans le fichier ? – Maria

Répondre

1

Il vous oubliez outfile.open() semble ..

MISE À JOUR: Ok, a obtenu le problème ici (un subtil). Vous ne devez pas déclarer ofstream dans l'instruction de cas de basculement. Au lieu de le déclarer comme ceci:

int value; 
ofstream outfile("G:/File3.txt", ios::out); 
    char option = 'r'; 


    switch (option) 
    { 
     case 'r': 
     case 'R': 

      if(!outfile.is_open()) 
      { 
       cout<<"File could not be opened"<<endl; 
       exit(1); 
      } 
      if (raffle(value)==1) 
      { 
       outfile<<"The number "<<value<<"is present in the array."<<endl; 
      } 
      else 
      { 
       outfile<<"The number "<<value<<"is not present in the array."<<endl; 
      } 

      break; 

case 'e' : 
case 'E' : 
break; 
    } 
outfile.close(); 
return 0; 

Et toujours la valeur de retour si vous déclarez int main() Version complète du code modifié est here.

+0

Il n'y a rien Dans le fichier, et le fichier existe, ce que je suis censé faire est de mettre une de ces pièces dans le fichier. Si le nombre choisi est en fait présent dans le tableau, alors cette phrase est supposée être mise en place, ect si ce n'est pas le cas. Suis-je censé d'abord ouvrir le fichier pour qu'il soit mis en place et ensuite imprimer dans le fichier? – Maria

+0

Oui, vous devez d'abord l'ouvrir. Jetez un coup d'oeil ici: http://www.cplusplus.com/doc/tutorial/files/ –

+0

Hmm, bien j'ai ajouté le outfile.open et cela ne fonctionne toujours pas. – Maria

0

Voici le code modifié ::

#include <iostream> 
#include <fstream> 
#include <cstdlib> 

using namespace std; 

void ascii (int number); 
bool raffle (int number); 
const int cArray=5; 

int main() 
{ 

    int value; 

    char option; 

while (1) 
{ 


    cout <<"Enter a positive integer number: " <<endl; 
    cin >>value; 
    cout <<endl; 


    cout <<"A[scii]" "\t\tR[affle]" "\t\tE[xit]" <<endl; 
    cout <<"Please select an option: " <<endl; 
    cin >>option; 
    cout<<endl; 

    ofstream outfile("./File3.txt", ios::out); 

    switch (tolower(option)) 
    { 
     case 'a': 

      ascii(value); 
      break; 
     case 'r': 
      if(!outfile) 
      { 
       cout<<"File could not be opened"<<endl; 
       exit(1); 
      } 
      if (raffle(value)==1) 
      { 
       outfile<<"The number "<<value<<"is present in the array."<<endl; 
      } 
      else 
      { 
       outfile<<"The number "<<value<<"is not present in the array."<<endl; 
      } 
      outfile.close(); 
      break; 

     case 'e': 
       return 0; 
      break; 


    } 
     } 

     return 0; 
} 


void ascii (int value) 
{ 

    if (48 <= value && value <= 57) 
    { 
     cout <<"The number you have entered corresponds to a digit in the ASCII table." <<endl; 
    } 
    else if(65 <= value && value <= 90) 
    { 
     cout <<"The number you have entered corresponds to an uppercase letter in the ASCII table." <<endl; 
    } 
    else if (97 <= value && value <= 122) 
    { 
     cout <<"The number you have entered corresponds to a lowercase letter in the ASCII table." <<endl; 
    } 
    else 
    { 
     cout <<"The number you have entered corresponds to none of the above." << endl; 
    } 

} 

bool raffle (int value) 
{ 
    int random[cArray]; 
    srand(time(NULL)); 
    for (int i=0; i<5; i++) 
    { 
     random[i]= 0+rand()%(100+1-0); 
     cout<<random[i]<<" "<<endl; 
    } 

    for (int j=0; j<5; j++) 
    { 
     if (value == random[j]) 
     { 
      cout << "\n" <<j<<endl; 

      return true; 
     } 
    } 
      cout << "Number not present."<<endl; 
      return false; 
} 

Le problème que je pense est de déclarer un ruisseau seul côté l'un des cas branches..which rend une variable/flux dangereux. Le code fonctionne pour moi sous Linux

0

Bonjour à tous ceux qui m'ont aidé à essayer de résoudre ce problème. J'ai découvert que le commutateur et fstream étaient incompatibles, donc j'ai changé mes cas aux instructions if() et if(), et au lieu d'avoir mon (tomble (value == 1) je l'ai changé en (tomble (value == vrai) et cela fonctionne! Donc encore une fois, merci à tous pour vos réponses, en particulier vous Hoang Long! -Maria: D

Questions connexes