Einer Variablen (z.B: "a") per scanf einen buchstaben z.B. "B" zuordnen?



  • Habe folgendes Problem ich habe eine Variable

    a

    welcher ich dann per Eingabe z.B über "scanf" einen anderen buchstaben zu ordnen möchte.

    a=B

    dann will ich mit if abfragen

    if (a=='B') {c=c+50}

    a sollte sowohl zahlen als auch buchstaben annehmen können. bsp:

    a=10
    a=A
    ...
    ebenso das if
    (a=='B')
    (a==10)
    ...

    Geht das, wenn ja wie?

    mfg



  • int main()
    {
      char c;
      scanf("%c", &c);
      if (c == 'B')
        c += 50;
    }
    


  • Danke für die schnelle Antwort, allerdings ist das nicht des Problems lösung?

    Also ich formulier das Problem noch mal anderst:

    ich habe Zwei Variable a und b,

    wenn für a, mittels scanf ein "B" per tastatur eingegeben wird soll zur variablen b der wert 50 hinzuaddiertwerden (Ursprungswert einfach mal 0)

    das müsste ja dann so aussehen:

    int main(int argc, char *argv[])

    {
    int b; //Variable b
    char a; //Variable a, welche Buchstaben und Zahlen annehmen sollte
    b=0; //Startwert b

    scanf("%c", &a); //Eingabe z.B. "B" oder "10" für a
    if (a == 'B') //Wenn a gleich "B" dann b+50, sonst b=0
    {b=b+50;}
    }

    Wenn ich das so allerdings eingebe, kommen für b egal ob ich nun für a "B" oder "10" eingebe, werte raus, aber nicht 50.



  • Bevor wir hier aneinander vorbei reden:
    Du kennst den Unterschied zwischen 1, '1' und "1"?



  • Simon Bader schrieb:

    int main(int argc, char *argv[])
    {
      int b;          //Variable b
      char a;         //Variable a, welche Buchstaben und Zahlen annehmen sollte
      b=0;            //Startwert b
    
      scanf("%c", &a);    //Eingabe z.B. "B" oder "10" für a
      if (a == 'B')       //Wenn a gleich "B" dann b+50, sonst b=0
        {b=b+50;}
    }
    

    1. Hatte deinen Eingangspost wohl völlig falsch verstanden.
    2. Bitte Code Tags nutzen.
    3. Frage von DirkB
    4. mit %c kannst du kein "10" einlesen.
    5. Was genau willst du eigentlich erreichen, wenn das bekannt ist kann dir vermutlich besser geholfen werden.

    Edit:
    6. http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

    7.:
    char string[] = "hallo";
    wird zu:
    'h' 'a' 'l' 'l' 'o' '\0'



  • Also Aufgabe ist es mithilfe einer Zeichenfolge werte aus einer Tabelle zu entnehmen.

    Ich habe Buchstaben und Zahlen: A,B,C,s,o,1,2,3

    Und eine Tabelle mit hinterlegten Werten:

    Für "ACo" ist der Wert 60 hinterlegt
    Für "ACs" ist der Wert 57 hinterlegt
    Für "ABo" ist der Wert 54 hinterlegt
    Für "A3s" ist der Wert 13 hinterlegt

    usw.

    Nun gebe ich den Code in 3 Schritten ein und möchte dies jeweils in einer Variablen a,b,c festhalten um anschließend den zu dem Code den richtigen Wert auszugeben.

    also sagen wir a=A ; b=C und c=s, also den Wert 57

    Jede der 3 Eingaben kann also sowohl Groß oder kleinbuchstabe sein, als auch eine Zahl.



  • int main()
    {
      char input[5]; // a, b, c, '\n', '\0'
      fgets(input, sizeof(input), stdin);
      input[strlen(input) - 1] = '\0'; // '\n' löschen
      if (strcmp(input, "ACo") == 0)
        printf("%i", 60);
      else if(...
    }
    

    So in etwa?

    Edit:
    Wie lang ist denn die Tabelle? Ist die Tabelle also einfach eine Textdatei? Sind mit "eine Zahl" nur einstellige oder auch zweistellige Zahlen gemeint?



  • es gibt auch zwei stellige Zahlen werte.

    Danke schon mal für die Hilfe, werds gleich mal integrieren.



  • Simon Bader schrieb:

    es gibt auch zwei stellige Zahlen werte.

    Dann musst du die Größe von input eventuell erhöhen. Wenn die Tabelle klein genug ist, kannst du es so wie gezeigt machen. Ansonsten wird es aufwendiger, vor allem wenn die Tabelle unsortiert ist.



  • int main()
    {
      char input[100], *s="ACoACsABoA3s";
      fgets(input, 100, stdin);
      if( strchr(input,'\n') ) *strchr(input,'\n')=0;
      printf("%d","\0\74\71\66\15"[strstr(s,input)?(strstr(s,input)-s)/3+1:0]);
      return 0;
    }
    


  • Hier eine Variante, die etwas besser zu warten ist und sich auch besser anpassen lässt.

    #include <string.h>
    #include <stdio.h>
    
    int main()
    {
    	char *code[] = {"ACo", "ACs", "ABo", "A3s"}; // Codes als String
    	int value[] = {60, 57, 54, 13}; // Wert für Codes
    
    	int i;
    
    	char buf[5];
    	fgets(buf, sizeof(buf), stdin);
    
    	buf[strlen(buf)-1]=0;
    
    	for (i = 0; i < sizeof(code)/sizeof(*code); ++i)
    	{
    		if (strcmp(code[i], buf) == 0)
    		{
    			printf("%s = %d\n", code[i], value[i]);
    
    			break;
    		}
    	}
    }
    

Log in to reply