2016-06-30 9 views
5

Ich bin gerade dabei, mich für das Programmieren der Schule vorzubereiten, indem ich durch das Lehrbuch gehe. Es gibt diese spezielle Frage, die ich nicht verstehe, und das Lehrbuch gibt die Antwort nicht.Unterschied zwischen verschiedenen ScanF-Formaten

PS: Ich habe ein paar C++/C# online gelernt, gehe aber nie durch richtig unterrichtete Programmierkurse, daher habe ich Probleme mit einigen Konzepten.

F: Geben Sie für jedes der folgenden Paare von scanf-Formatzeichenfolgen an, unabhängig davon, ob die beiden Zeichenfolgen äquivalent sind oder nicht. Wenn nicht, zeigen Sie , wie sie unterschieden werden können.

A) "%d" gegen " %d"
B) "%d-%d-%d" gegen "%d -%d -%d"
C) "%f" gegen "%f "
D) "%f,%f" gegen "%f, %f"

Zunächst einmal, ich verstehe nicht einmal, was die Frage zu stellen ist . Was bedeutet das Lehrbuch, ob die 2 Strings "äquivalent" sind oder nicht?

Wenn sie sind, könnte jemand die Unterschiede erklären und mir möglicherweise zeigen, wie sie unterschieden werden können?

+0

Sie sollten für Mathe-Hausaufgaben zu Ihrem prof reden ... aber „Äquivalent“ könnte ein Synonym für „gleich“ betrachtet. "Wäre die Ausgabe dieser Formatzeichenfolgen gleich". Ja/Nein, dann erkläre, WIE sie gleich/verschieden sind. –

+0

Sorry zu sagen, diese Frage wird zu weit gefasst sein, um hier zu antworten .... Sie brauchen ein Tutorial. –

+0

Diese Frage ist eigentlich sehr breit, aber es ist höchstmögliche Qualität – xenteros

Antwort

2

uns A Lassen sie zuerst versuchen: "%d" gegen " %d", sie gleichwertig Formatstrings für scanf() sind.

" " wird Folgendes tun. Es versagt nie.
1) Scannen und Verwerfen (Überspringen) des optionalen Leerzeichens.
2) Nach dem Lesen eines Nicht-Leerzeichens oder Dateiendes, wenn nicht (EOF), wird das zuletzt gelesene Zeichen wieder in stdin gesetzt.

"%d" selbst wird drei Dinge versuchen (es fehlschlagen kann)
1) Scan und verwerfen (überspringen) optional white-space.
2) Scannen und konvertieren Sie numerischen Text, der eine Dezimalzahl darstellt.
3) Nach dem Lesen eines nicht-numerischen Textes oder Dateiendes, wenn nicht (EOF), wird das zuletzt gelesene Zeichen wieder in stdin gesetzt.

" %d" funktioniert beides. Es ist das gleiche Ergebnis von nur den 2. mit "%d" zu tun.

Mit *scanf() Spezifizierer beachten:

Eingangsleerraumzeichen (wie durch die isspace Funktion angegeben) werden übersprungen, es sei denn, die Spezifikation eines [, c oder n Spezifizierer enthält. C11 §7.21.6.2 8


B, C, D Unterschiede?

Mouse over für Tipp 1:

A " " vor einem scanf() Spezifizierer, mit Ausnahme der 3 oben erwähnt, ist ein äquivalentes scanf() Format als ohne sie.

Mouse over für Tipp 2:

Nur 1 von 3 äquivalent.

Mouse over für Tipp 3:

Eingänge Bedenken Sie:
"123 -456-789"
"123.456 x" Was ist das nächste Zeichen zu sein lesen?

B) "%d-%d-%d" gegen "%d -%d -%d"
C) "%f" gegen "%f "
D) "%f,%f" gegen "%f, %f"

Antwort:

Awww, Sie wirklich Sie wollen die antwort bekommen?

+1

Hallo, Chux, danke, dass du dir die Zeit genommen hast, mir das Konzept zu erklären! Ihre Hilfe wird gerne in Anspruch genommen! :) –

0

Von Wikipedia

Leerzeichen: Alle Leerzeichen einen Scan für null oder mehr Leerzeichen auslösen. Die Anzahl und der Typ der Leerzeichen müssen nicht in beide Richtungen übereinstimmen.

scanf ist über den Verzehr der Eingabe und erhalten Sie die Sache, die Sie interessieren. Die normale Zeichenkette in Formatzeichenfolge bedeutet, dass sie das exakt gleiche Zeichen konsumiert und nichts anderes tut. %d, %f könnte die führenden Leerzeichen überspringen. Also, es zusammenzufassen, wir haben:

  • A, es ist die gleiche, weil %d der führende Raum
  • B überspringen, %d-%d-%d ist ziemlich streng, es liest eine ganze Zahl nach genau - und dann noch einer ganzen Zahl und So, so heißt es 1-2-3 gut, 1- 2- 3 auch, aber es scheitert an 1 - 2 - 3. Während auf der anderen Seite, %d -%d -%d ersten Sprungplätze, eine ganze Zahl lesen, überspringen Räume erwarten char -, dann überspringen Räume wieder, und so weiter ...
  • C, nachstehende Leerzeichen macht keinen Unterschied
  • D, es ist die gleiche, weil %f führende Leerzeichen überspringen, zu

So wäre die Antwort B.

+0

Nicht einverstanden mit "C, nachstehende Leerzeichen macht keinen Unterschied". Überlege, was das nächste gelesene Zeichen ist. – chux

+0

Hi, Delta, danke, dass du dir die Zeit genommen hast, mir das Konzept zu erklären! Ihre Hilfe wird gerne in Anspruch genommen! :) –