Grundlagen der C-Sprache – der Rückgabewert der Scanf-Funktion und ihre Anwendung

Vorwort: Die Scanf-Funktion hat einen Rückgabewert

Wenn wir Programmieraufgaben auf PTA ausführen, sehen wir häufig die folgenden Informationen im Kompilierungsfenster:

warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]

Zu diesem Zeitpunkt würde Ihnen der Lehrer definitiv sagen, dass es sich um einen „Warn“-Alarm handelt und Sie ihn ignorieren können, was tatsächlich der Fall ist. Über diese Alarmmeldung können wir jedoch zumindest eines wissen: Es gibt einen Rückgabewert nach dem Aufruf der Scanf-Funktion. Als nächstes werden wir den Scanf-Rückgabewert im Detail besprechen. Und geben Sie einige Funktionen an, die durch die Verwendung des Rückgabewerts von scanf während der Programmierung erreicht werden können.

1. Rückgabewert von scanf

Schauen wir uns zunächst ein Beispiel an.

eingeben:

3 5

Code:

#include <stdio.h>
int main () {
	int a,b,c;
	c = scanf("%d%d", &a, &b);
	printf("the return value of scanf is: %d\n", c);
	return 0;
}

Ausgabe:

the return value of scanf is: 2

Anhand dieses Beispiels können wir erkennen, dass die scanf-Funktion tatsächlich einen Rückgabewert hat. Wenn wir den obigen Code ausführen und die beiden Zahlen 3 und 5 eingeben, wird zuerst die Scanf-Funktion aufgerufen und die beiden Ganzzahlen eingegeben (scanf hat nach Abschluss der Ausgabe einen Rückgabewert) und dann die Printf-Funktion ausgeführt werden, und die printf-Funktion wird entsprechend dem Format ausgeführt. Der Rückgabewert von scanf wird ausgegeben. Anhand dieses Beispiels können wir auch mutig erraten, dass der Rückgabewert der Funktion scanf die Anzahl der von scanf korrekt gelesenen Variablen ist. Diese Vermutung ist halb richtig, die vollständige Aussage sollte lauten:

Die Rückgabe r der Scanf-Funktion erfüllt: (1) Wenn der Eingabestream eine Eingabe enthält, ist r gleich der Anzahl der von der Scanf-Funktion korrekt gelesenen Variablen; (2) Wenn der Eingabestream keine Eingabe enthält, ist r ist gleich -1.

Hinweis: Keine Eingabe und falsche Eingabe sind unterschiedliche Situationen. Lassen Sie uns unten ein Beispiel geben.

Code:

#include <stdio.h>
int main () {
	int a,b;
	printf("%d\n", scanf("%d,%d", &a,&b));
	return 0;
}

Für den obigen Code geben wir zur Veranschaulichung drei Eingabe- und Ausgabebeispiele.

Ausgabe 1:

3 5

Ausgabe 1:

1

Beachten Sie, dass der erste Parameter des Scanf-Funktionsaufrufs im Code, dh die Formatanpassungszeichenfolge, „%d,%d“ ist und die Eingabe im Ausgabestream „3 5“ ist. Offensichtlich kann die Scanf-Funktion die „3“ korrekt in den Eingabestream eingeben; dann stimmt sie mit der Zeichenfolge entsprechend dem Format überein. Nach 3 sollte sie mit einem „,“ übereinstimmen, aber Es gibt keine korrekte Eingabe im Eingabestream. Übereinstimmungen, daher kann scanf die Eingabe nicht fortsetzen und kehrt zurück. Da bereits eine korrekte Eingabe vorliegt, ist der Rückgabewert 1.

Ausgabe 2:

,3,5

Ausgabe 2:

0

In diesem Beispiel stimmt das erste (nicht leere) Zeichen „,“ im Eingabestream nicht mit dem ersten Zeichen „%d“ der übereinstimmenden Zeichenfolge überein, sodass die Scanf-Funktion nicht mit der Eingabe fortfahren kann und nicht zurückkehrt. Zu diesem Zeitpunkt gab es keine korrekte Eingabe, daher ist der Rückgabewert 0.

Ausgabe 3:

^Z

Ausgabe 3:

-1

Beachten Sie, dass die Eingabe in Eingabe 3 nicht „^Z“ ist, sondern durch die Verwendung von Strg+Z unter Windows ohne Rückgabewert simuliert wird. Bei Verwendung von Strg+D unter Mac ist die Eingabe auf der PTA-Plattform leer. Zu diesem Zeitpunkt gibt es überhaupt keine Eingabe im Eingabestream, daher ist der Rückgabewert -1.

2. Die wunderbare Verwendung des Rückgabewerts der Scanf-Funktion

Bei PTA-Jobs stoßen wir häufig auf solche Eingabeprobleme, das heißt, Sie müssen einige Daten eingeben, wir sagen Ihnen jedoch nicht, wie viele Daten insgesamt vorhanden sind. Zu diesem Zeitpunkt können wir den Rückgabewert von scanf verwenden, um dieses Problem zu lösen .

Um ein konkretes Beispiel zu nennen: Es ist erforderlich, eine Menge von Ganzzahlen einzugeben und die ungeraden und geraden Zahlen dieser Menge von Ganzzahlen in der Eingabereihenfolge einzugeben, 1 für ungerade Zahlen einzugeben und 0 für gerade Zahlen auszugeben.

Eingabebeispiel:

12 23 34 45 56 67 78 89 91 13 24 35

Ausgabebeispiel:

0 1 0 1 0 1 0 1 1 1 0 1

Code:

#include <stdio.h>
int main () {
	int a;
	while(scanf("%d", &a) != EOF) {
		printf("%d ", a%2);
	}
	return 0;
}

Im obigen Code haben wir eine While-Schleife in Kombination mit dem Rückgabewert der Scanf-Funktion verwendet, um die Eingabe unbekannter Daten abzuschließen. Konkret: Die Schleifenbedingung von while lautet scanf("%d", &a) != EOF. In diesem Fall wartet EOF auf -1. Sie können es auch direkt als -1 schreiben. Wenn im Eingabestream noch Eingaben vorhanden sind, darf der Rückgabewert von scanf("%d", &a) nicht gleich -1 sein, die Schleifenbedingung ist wahr und die Schleife wird fortgesetzt. Wenn am Ende des von scanf gescannten Eingabestreams nichts einzugeben ist, gibt scanf("%d", &a) -1 zurück, die Schleifenbedingung ist falsch und die Schleife endet.

Hinweis: Wenn Sie mehrere durch Leerzeichen getrennte Zeichen eingeben, müssen Sie Leerzeichen an den entsprechenden Positionen in der passenden Zeichenfolge einfügen.

Supongo que te gusta

Origin blog.csdn.net/morn_l/article/details/134390611
Recomendado
Clasificación