Häufige Fehler in der C-Sprache (Repost)
Die größten Merkmale der C-Sprache sind: leistungsstarke Funktionen, einfache und flexible Verwendung. C-kompilierte Programme unterliegen nicht so strengen Anforderungen an die Syntaxprüfung wie andere Hochsprachen, was den Programmierern „Raum für Flexibilität“ lässt. Diese Flexibilität bringt jedoch viele Unannehmlichkeiten beim Programm-Debuggen mit sich, insbesondere für Anfänger, die die Sprache C häufig erlernen machen Fehler, von denen sie nicht einmal wissen, wo sie falsch gelaufen sind. Wenn ich mir das fehlerhafte Programm ansehe, weiß ich nicht, wie ich es korrigieren kann. Durch das Studium von C habe ich einige häufige Fehler in der C-Programmierung gesammelt und sie als Referenz geschrieben.
1. Ignorieren Sie beim Schreiben von Bezeichnern den Unterschied zwischen Groß- und Kleinbuchstaben.
main()
{
int a=5;
PRintf("%d",A);
}
Der Compiler betrachtet a und A als zwei verschiedene Variablennamen und eine Fehlermeldung wird angezeigt. C betrachtet Großbuchstaben und Kleinbuchstaben als zwei verschiedene Zeichen. Konventionell werden symbolische Konstantennamen in Großbuchstaben und Variablennamen in Kleinbuchstaben geschrieben, um die Lesbarkeit zu verbessern.
2. Den Typ der Variablen ignorieren und eine unzulässige Operation ausführen.
main()
{
float a,b;
printf("%d",a%b);
}
% ist die Restoperation, die a/b erhält der ganzzahlige Rest. Ganzzahlige Variablen a und b können Restoperationen ausführen, reelle Variablen dürfen jedoch keine „Rest“-Operationen ausführen.
3. Verwechseln Sie Zeichenkonstanten mit Zeichenfolgenkonstanten.
char c;
c="a";
Hier werden Zeichenkonstanten und Zeichenfolgenkonstanten verwechselt. Zeichenkonstanten sind ein einzelnes Zeichen, das von einem Paar einfacher Anführungszeichen umgeben ist, und Zeichenfolgenkonstanten sind ein einzelnes Paar Anführungszeichen. Eine in doppelte Anführungszeichen eingeschlossene Zeichenfolge. C legt fest, dass „“ als Endmarke einer Zeichenfolge verwendet wird. Es wird vom System automatisch hinzugefügt, sodass die Zeichenfolge „a“ tatsächlich zwei Zeichen enthält: „a“ und „“, und die Zuweisung zu einer Zeichenvariablen nicht Arbeit von.
4. Ignorieren Sie den Unterschied zwischen „=" und „==".
In vielen Hochsprachen wird das Symbol „=“ als Vergleichsoperator „gleich“ verwendet. Beispielsweise können Sie in einem BASIC-Programm schreiben:
if (a=3) then...
Aber in der C-Sprache ist „=" ein Zuweisungsoperator und „==" ein Vergleichsoperator. Zum Beispiel:
if (a==3) a=b;
Ersteres dient zum Vergleich, ob a gleich 3 ist, und letzteres bedeutet, dass, wenn a gleich 3 ist, der Wert von b zugewiesen wird A. Anfänger machen solche Fehler oft aus Gewohnheit.
5. Ich habe vergessen, das Semikolon hinzuzufügen.
Das Semikolon ist ein unverzichtbarer Bestandteil der C-Anweisung und am Ende der Anweisung muss ein Semikolon stehen.
a=1
b=2
Beim Kompilieren findet der Compiler nach „a=1“ kein Semikolon, daher übernimmt er die nächste Zeile „b=2“ als Teil der vorherigen Zeile von Es kommt zu einem Syntaxfehler. Wenn beim Korrigieren von Fehlern manchmal kein Fehler in der Zeile gefunden wird, in der auf den Fehler hingewiesen wurde, müssen Sie prüfen, ob in der vorherigen Zeile ein Semikolon fehlt.
{ z=x+y;
t=z/100;
printf("%f",t);
}
Bei zusammengesetzten Anweisungen ist das letzte Das Semikolon kann nicht ignoriert werden (dies unterscheidet sich von PASCAL).
6. Fügen Sie weitere Semikolons hinzu.
Für eine zusammengesetzte Anweisung wie:
{ z=x+y;
t=z/100;
printf("%f",t);
};
Nach den geschweiften Klammern einer zusammengesetzten Anweisung sollte kein Semikolon eingefügt werden, da es sonst überflüssig ist.
Ein weiteres Beispiel:
if (a%3==0);
I++;
Das heißt, wenn 3 a teilt, dann addiere ich 1. Da jedoch nach if (a%3==0) ein zusätzliches Semikolon steht, endet die if-Anweisung hier und das Programm führt die I++-Anweisung aus. Unabhängig davon, ob a durch 3 geteilt wird, erhöhe ich automatisch um 1.
Ein weiteres Beispiel:
für (I=0;I<5;I++);
Die ursprüngliche Absicht besteht darin, 5 Zahlen nacheinander einzugeben und sie dann auszugeben, nachdem jede Zahl eingegeben wurde. Da nach for() ein zusätzliches Semikolon hinzugefügt wird, wird der Schleifenkörper zu einer leeren Anweisung. Zu diesem Zeitpunkt kann nur eine Zahl eingegeben und ausgegeben werden.
7. Ich habe vergessen, bei der Eingabe von Variablen den Adressoperator „&“ hinzuzufügen.
int a,b;
scanf("%d%d",a,b);
Das ist illegal. Die Funktion der Scanf-Funktion besteht darin, die Werte von a und b entsprechend den Adressen von a und b im Speicher zu speichern. „&a“ bezieht sich auf die Adresse von a im Speicher.
8. Die Methode zur Dateneingabe entspricht nicht den Anforderungen. ①scanf("%d%d",&a,&b);
Bei der Eingabe dürfen Kommas nicht als Trennzeichen zwischen zwei Daten verwendet werden. Beispielsweise ist die folgende Eingabe unzulässig:
3, 4
Wann Bei der Eingabe von Daten, getrennt durch ein oder mehrere Leerzeichen zwischen zwei Daten, können Sie auch die Eingabetaste und die Tabulatortaste verwenden.
②scanf("%d,%d",&a,&b);
C legt fest: Wenn neben der Formatbeschreibung noch andere Zeichen in der Zeichenfolge „Formatsteuerung“ vorhanden sind, sollten Sie diese Zeichen eingeben Charaktere. Die folgende Eingabe ist zulässig:
3, 4
Es ist derzeit falsch, Leerzeichen oder andere Zeichen anstelle von Kommas zu verwenden.
3 4 3:4
Ein weiteres Beispiel:
scanf("a=%d,b=%d",&a,&b);
Die Eingabe sollte in der folgenden Form erfolgen:
a= 3,b=4
9. Das Format der Eingabezeichen stimmt nicht mit den Anforderungen überein.
Bei der Eingabe von Zeichen im „%c“-Format werden sowohl „Leerzeichen“ als auch „Escape-Zeichen“ als gültige Zeichen eingegeben.
scanf("%c%c%c",&c1,&c2,&c3);
Wenn Sie a b c eingeben
Das Zeichen „a“ wird an c1 gesendet, das Zeichen „ “ wird an gesendet c2, und das Zeichen „b“ wird gesendet. Geben Sie c3 an, da %c nur das Lesen eines Zeichens erfordert und kein Leerzeichen als Intervall zwischen zwei Zeichen verwendet werden muss.
10. Die Eingabe- und Ausgabedatentypen stimmen nicht mit dem verwendeten Formatbezeichner überein.
Zum Beispiel wurde a als Ganzzahltyp und b als Realtyp definiert
a=3;b=4.5;
printf("%f%d ",a,b);
Während der Kompilierung wird keine Fehlermeldung ausgegeben, aber die ausgeführten Ergebnisse stimmen nicht mit der ursprünglichen Absicht überein. Diese Art von Fehler erfordert besondere Aufmerksamkeit.
11. Versuchen Sie bei der Eingabe von Daten auf Genauigkeit zu achten.
scanf("%7.2f",&a);
Dies ist illegal und die Genauigkeit kann bei der Dateneingabe nicht angegeben werden.
12. Die break-Anweisung wird in der switch-Anweisung weggelassen.
Zum Beispiel: Drucken Sie Prozentsegmente basierend auf der Note der Testergebnisse aus.
switch(grade)
{ case 'A':printf("85~100 ");
case 'B':printf("70~84 ");
case 'C': printf("60~69 ");
case 'D':printf("<60 ");
default:printf("error ");
Aufgrund der fehlenden break-Anweisung nur case dient als Etikett, nicht als Urteil. Wenn der Notenwert A ist, führt die printf-Funktion daher die zweite, dritte, vierte und fünfte printf-Funktionsanweisung aus, nachdem die erste Anweisung ausgeführt wurde. Die richtige Schreibweise besteht darin, nach jedem Zweig „break;“ hinzuzufügen. Beispiel:
case 'A':printf("85~100 ");break;
13 Ignorieren Sie den Unterschied in den Details zwischen while- und do-while-Anweisungen.
(1)main()
{int a=0,I;
scanf("%d",&I);
while(I<=10)
printf("%d",a);
}
(2)main()
{int a=0,I;
scanf("%d",&I);
do
while(I<=10);
printf("%d",a);
}
Sie können das sehen, wenn der Wert der Eingabe I kleiner oder gleich ist 10, zwei Die erhaltenen Ergebnisse sind die gleichen. Bei I>10 sind die Ergebnisse unterschiedlich. Denn die while-Schleife wird zuerst bestimmt und dann ausgeführt, während die do-while-Schleife zuerst ausgeführt und dann bestimmt wird. Bei Zahlen größer als 10 führt die while-Schleife den Schleifenkörper nicht einmal aus, während die do-while-Anweisung den Schleifenkörper einmal ausführt.
14. Missbrauch von Variablen beim Definieren von Arrays.
int n;
scanf("%d",&n);
int a[n];
Der in eckige Klammern eingeschlossene Array-Name ist ein konstanter Ausdruck, der Konstanten und Symbole enthalten kann. Konstante. Das heißt, C erlaubt keine dynamische Definition der Größe des Arrays.
15. Bei der Definition eines Arrays wird die definierte „Anzahl der Elemente“ mit dem maximal verwendbaren Indexwert verwechselt.
main()
{static int a[10]=;
printf("%d",a[10]);
}
C-Sprachvorschriften: Verwenden Sie beim Definieren a[ 10], was darauf hinweist, dass Array a 10 Elemente hat. Sein tiefgestellter Wert beginnt bei 0, daher existiert das Array-Element a[10] nicht.
16. Bei der Initialisierung des Arrays wird kein statischer Speicher verwendet.
int a[3]=;
Es ist falsch, das Array auf diese Weise zu initialisieren. Die C-Sprache legt fest, dass nur statische Speicherarrays (statisch) und externe Speicherarrays (exterm) initialisiert werden können. Es sollte geändert werden in:
static int a[3]=;
17 Der Adressoperator & wird hinzugefügt, wo der Adressoperator & nicht hinzugefügt werden sollte.
scanf("%s",&str);
Das C-Sprachkompilierungssystem behandelt Array-Namen wie folgt: Der Array-Name stellt die Startadresse des Arrays dar, und das Eingabeelement in der Scanf-Funktion ist ein Zeichenarray Name, nicht Fügen Sie bei Bedarf das Adresszeichen & hinzu. Es sollte geändert werden in:
scanf("%s",str);
18 Die formalen Parameter und lokalen Variablen in der Funktion werden gleichzeitig definiert.
int max(x,y)
int x,y,z;
Formale Parameter sollten außerhalb des Funktionskörpers definiert werden, während lokale Variablen innerhalb des Funktionskörpers definiert werden sollten. Sollte geändert werden in:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z) ;
}
Das Obige ist eine Sammlung häufiger Fehler in der C-Sprachprogrammierung. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn).