2011-01-17 4 views
1

fgetc() pour le traitement des caractères saisis - char par char. La fonction renvoie la valeur entière du caractère entré.Conversion des caractères d'entrée en chaîne

Je dois vérifier ces:

  • Chaque ville ne doit pas dépasser 30 caractères
  • Il existe un caractère « - » (tableau de bord) sur chaque ligne (division de la ligne entière à deux villes)

J'ai défini 31-int-array et un entier pour compter les caractères. Lorsque l'utilisateur saisit "-", j'ai besoin de sauvegarder les caractères sous la forme d'une chaîne dans un autre tableau (carte en fait).

printf("Enter route (city - city):\n"); 

char town[31]; 
int character, charsOnRow = 0, i = 0; 
map<int, string> route; 

while (!feof(stdin)) { 
    character = fgetc(stdin); 
    if (character != '-' && character != '\n') { 
     if (charsOnRow < 30) { 
      town[charsOnRow] = character; 
      charsOnRow++; 
     } else { 
      printf("Invalid input.\n"); 
     } 
    } else if (route.size() == 0 && character == '\n') { 
     printf("Invalid input.\n"); 
    } else { 
     town[charsOnRow] = '\0'; 
     route[i] = town; 
     charsOnRow = 0; 
    } 
} 

Ainsi, exemple d'entrée serait:

Syracuse - Utica 
Binghamton - Syracuse 
Binghamton - Utica 

Comment dois-je réparer et être en mesure d'enregistrer int-tableau à map<int, string>?

+0

vous avez déclaré un tableau de pointeurs char. Je ne pense pas que ce soit ce que tu veux – ThomasMcLeod

Répondre

2

Vous avez à la fois des erreurs techniques (C++ non valide) et des erreurs logiques.

Une cause principale de cela est la complexité de faire l'entrée char-by-char.

Vous pouvez trouver plus facile d'utiliser le niveau C++ i/o: déclarer une variable std::string de tenir une ligne complète d'entrée, lire en utilisant std::getline.

Vive & HTH.,

0

Vous devez déclarer town en tant que groupe de caractères. Actuellement, vous l'avez comme un tableau de pointeur de caractères.

changement

char * town[31]; 

à

char town[31]; 
0

fgetc En fait retourner un entier pour indiquer une condition d'erreur, si la valeur est < 0, vous avez eu une erreur, sinon, vous pouvez simplement l'ajouter à une chaîne, comme:

std::string str; 
for(;;) 
{ 
    int ch = fgetc(fp); 
    if(ch < 0) 
    throw error(); 

    str += ch; 
} 

Lorsque vous remplissez la chaîne, ajoutez-la au Carte: map [yourIntValue] = str;

Aussi, sur votre code: char * town [31];

Ceci est un tableau de pointeur, le bon pour votre cas est: char town [31];

Et pour l'ajouter à la carte, vous pouvez utiliser simplement: map [yourIntValue] = std :: string (town);

Questions connexes