2016-04-13 9 views
-2

Ich habe ein Problem mit diesem Problem. Ich habe diese Zuordnung, die ich Zeichen als Zahlenwert anzeigen muss. Genau wie Hotline-Telefonnummer, z. B. Anruf 1-800-the-best. Es wird der ganze Buchstabe als Nummer angezeigt.Anzeige Char, die in Char-Array als int Wert

abc = 2, def = 3, ghi = 4, jkl = 5, mno = 6, pqrs = 7, tuv = 8, wxyz = 9. 

Ich versuche atoi verwenden, aber das wird sich das numerische Zeichen ignorieren und nur alphabetische Zeichen umwandeln.

Im mit Switch-Anweisung. Es gibt keinen Kompilierungsfehler, aber irgendwie ist mein Ausgabeergebnis komisch. hier ist mein Code

#include<stdio.h> 
#include<string.h> 
#define num 11 

int main(void) 
{ 
    char ch; 
    char number[11]; 
    int i = 0; 
    int j = 0; 

    printf("please enter your phone number: \n"); 


    for(i = 0; i < num; i++) 
    { 
     scanf_s("%c", &ch); 

     switch(ch) 
     { 
      case '0': 
       number[i] = 0; 
       break; 

      case '1': 
       number[i] = 1; 
       break; 

      case 'a': case 'b': case 'c': 
       number[i] = 2; 
       break; 

      case 'd': case 'e': case 'f': 
       number[i] = 3; 
       break; 

      case 'g': case 'h': case 'i': 
       number[i] = 4; 
       break; 

      case 'j': case 'k': case 'l': 
       number[i] = 5; 
       break; 

      case 'm': case 'n': case 'o': 
       number[i] = 6; 
       break; 

      case 'p': case 'q': case 'r': case 's': 
       number[i] = 7; 
       break; 

      case 't': case 'u': case 'v': 
       number[i] = 8; 
       break; 

      case 'w': case 'x': case 'y': case 'z': 
       number[i] = 9; 
       break; 
     } 
    } 

    printf("the phone number you enter is: "); 

    for(j = 0; j < num; j++) 
    { 
     printf("%d", number[j]); 
    } 

    return 0; 
} 

Wenn ich jedes Zeichen als Zahlen zB eingeben: 1 2 3 4 5 6 das Ausgangsergebnis ist

1-52-52-52-52-52-52-52-52-52 -52-52.

Wenn ich jedes Zeichen als Alphabet beispiels eingeben: a b c d e f das Ausgangsergebnis ist

2-522-522-523-523-523.

Ich frage mich, was ich falsch gemacht habe.

+3

Willkommen bei SO. Bitte lesen [fragen], und zeigen Sie Ihren Code. – OldProgrammer

+0

'int dialnum [128] = {0, 0, ... 2, 2, 2, 3, 3, 3, ...};' Die erste '2' steht auf' Dialnum ['A'] 'und Das Array kann auch numerische Werte, Kleinbuchstaben und Sonderzeichen verarbeiten. –

+0

danke. Lemme versuche diese Methode. –

Antwort

0

haben Sie vergessen zu sagen, was mit Zahleneingaben zu tun ist. Sie müssen sich mehr case-Anweisungen hinzufügen, eine für jede Zahl, etwa so:

#include<stdio.h> 
#include<string.h> 
#define num 11 

int main(void) 
{ 
    char ch; 
    char number[11]; 
    int i = 0; 
    int j = 0; 

    printf("please enter your phone number: \n"); 


    for(i = 0; i < num; i++) 
    { 
     scanf("%c", &ch); // changed from scanf_s() to scanf() 

     switch(ch) 
     { 
     case '0': 
      number[i] = 0; 
      break; 

     case '1': 
      number[i] = 1; 
      break; 

     case 'a': case 'b': case 'c':case '2': 
      number[i] = 2; 
      break; 

     case 'd': case 'e': case 'f': case '3': 
      number[i] = 3; 
      break; 

     case 'g': case 'h': case 'i': case '4': 
      number[i] = 4; 
      break; 

     case 'j': case 'k': case 'l': case '5': 
      number[i] = 5; 
      break; 

     case 'm': case 'n': case 'o': case '6': 
      number[i] = 6; 
      break; 

     case 'p': case 'q': case 'r': case 's': case '7': 
      number[i] = 7; 
      break; 

     case 't': case 'u': case 'v': case '8': 
      number[i] = 8; 
      break; 

     case 'w': case 'x': case 'y': case 'z': case '9': 
      number[i] = 9; 
      break; 
     } 
    } 

    printf("the phone number you enter is: "); 

    for(j = 0; j < num; j++) 
    { 
     printf("%d", number[j]); 
    } 

    return 0; 
} 

Dies kompiliert und lief richtig einmal die zusätzlichen Fälle eingegeben wurden. Doch Sie wollen auch mit Eingaben befassen, die keiner von ihnen sind, wäre der beste Weg, diese

default: printf("Number/letter not entered\n"); break; 

wird befassen sich mit Dingen wie .,# etc

Edited zu zeigen vollständige Programm hinzuzufügen sein.

+0

Ich nehme an, dass Leute andere Taste nicht drücken werden, wenn sie eine Nummer wählen, deshalb habe ich Standardfall für anderen Schlüssel nicht gemacht. Es nervt mich, warum ist das Ergebnis nicht richtig. –

+0

ah, ich sehe, was ich hier falsch gemacht habe. Danke. Lassen Sie mich meinen Code bearbeiten –

+0

hmm .... gleichen Fehler passieren. –