0 Daumen
303 Aufrufe

Frage:

Hallo, ich habe in C eine If-Abfrage gemacht in der ich nur eine Zahl von 1 oder 2 eingeben kann. Diese Eingabe speichere ich in die int Variable auswahl. Aber wenn ich das scanset %[1-2]d verwende wird mir bei einer Eingabe von 1 die Zahl 49 abgespeichert, und nicht 1. Ich weiß nur nicht warum.


Code:

int auswahl = 0;    
// If Anweisung um zu überprüfen ob die Eingabe richtig ist
  printf("M(\x94)chten Sie nur die ersten drei Daten auslesen [1] oder alle Daten auslesen [2]\n");
if(scanf("%[1-2]d",&auswahl)==1)
      printf("\n");
  else
{
  printf("Fehlerhafte Eingabe, entweder [1] oder [2] ausw(\x84)hlen\n");
  exit(1);
}
Avatar von

1 Antwort

0 Daumen

Eine conversion specification (d.h. das was mit % anfängt) hat folgendes Format:

        %<*><Width><Length><CS>.

Alle Teile außer <CS> sind optional.

  • <*> ist entweder * (es wird Eingabe gelesen, aber nicht der Variablen zugewiesen) oder nicht vorhanden.
  • <Width> ist eine Zahl die die Anzahl der maximal zu lesenden Zeichen angibt.
  • <Length> gibt vereinfacht ausgedrückt an, wieviel Speicher zur Verfügung steht, um die eingelesenen Daten zu speichern.
  • <CS> ist der conversion specifier. Er gibt an, wie die eingelesenen Zeichen interpretiert weden sollen.

Zu den bekannteren conversion specifiern gehören d (die Zeichen werden als die Ziffern einer ganzen Zahl in Dezimaldarstellung aufgefasst) und s (die Zeichen werden als Zeichen einer Zeichenkette aufgefasst).

Aber auch [ ist ein conversion specifier. Er funktioniert genau so wie s, außer das angegeben werden kann, welche Zeichen gelesen werden können. Insbesondere werden die gelesenen Zeichen als Zeichen einer Zeichenkette aufgefasst und nicht als Ziffern einer Zahl. Das d am Ende von %[1-2]d ist nicht Bestandteil der conversion specification.

Es wäre nett von deinem Compiler gewesen, wenn er dich gewarnt hätte, dass %[ ein char* erwartet aber wegen int anzahl ein int* bekommen hat.

Weitere Details findest du im Abschnitt 7.23.6.2 des Entwurfs zum ISO Standard 9899:2023 Programming languages — C ab Seite 336.

Avatar von 5,7 k

Danke für die Antwort, ich habe es verstanden

Der ASCII-Wert des Zeichens '1' ist 49.

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community