2012-05-09 9 views
6

Ich beginne gerade mit C und probierte ein paar Beispiele aus Ritchies Buch aus. Ich schrieb ein kleines Programm Zeichen-Arrays zu verstehen, aber auf einige Fehler gestolpert und war für einige Einsicht der Hoffnung auf das, was ich falsch verstanden habe:C Programmierung Anfänger - Bitte erläutern Sie diesen Fehler

#include <stdio.h> 
#define ARRAYSIZE 50 
#include <string.h> 

main() { 
    int c,i; 
    char letter[ARRAYSIZE]; 
    i=0; 
    while ((c=getchar()) != EOF) 
    {  
    letter[i]=c; 
    i++; 
    } 
    letter[i]='\0'; 
    printf("You entered %d characters\n",i); 
    printf("The word is "); 

    printf("%s\n",letter); 
    printf("The length of string is %d",strlen(letter)); 
    printf("Splitting the string into chars..\n"); 
    int j=0; 
    for (j=0;j++;(j<=strlen(letter))) 
    printf("The letter is %d\n",letter[j]); 
} 

Die Ausgabe lautet:

$ ./a.out 
hello how are youYou entered 17 characters 
The word is hello how are you 
The length of string is 17Splitting the string into chars.. 

Was ist Ereignis? Warum gibt die for-Schleife keine Ausgabe?

Antwort

11

Die Syntax sollte sein;

for (j=0; j<strlen(letter); j++) 

Seit strlen costy Betrieb ist, und Sie die Zeichenfolge innerhalb der Schleife nicht ändern, ist es besser, wie zu schreiben:

const int len = strlen(letter); 
for (j=0; j<=len; j++) 

Außerdem ist es stark unverbindliche immer Pufferüberlauf zu überprüfen, wenn arbeiten mit C-Strings und Benutzereingabe:

while ((c=getchar()) != EOF && i < ARRAYSIZE - 1) 
+1

+1 für die Empfehlung Array-gebundene Prüfung –

+0

Danke für diesen Tipp auch. Ich werde bald Fehlerprüfungen hinzufügen. Dachte, ich würde die Grundlagen klären. Seht, wie ich mich selbst in der Syntax von for falsch verstanden habe! :) – Droidzone

7

Der Fehler ist in der für Sie einfach die Endbedingung tauschen und die Schrittweite wie folgt aus:

for (j = 0; j <= strlen(letter); j++) 

Frage: was ist das letzte Zeichen?

+0

'j

+0

@ another.anon.coward: natürlich, aber ich denke, dass der Null-Terminator ist vorteilhaft für die op – BlackBear

+0

Ich denke, du hast Recht! ^^ –

3

Das richtige Format von for Schleife ist:

for (initialization_expression; loop_condition; increment_expression){ 
    // statements 
} 

so Ihre for Schleife sollte

for (j = 0; j < strlen(letter); j++) 
4

for (j=0;j++;(j<=strlen(letter))) sein, es ist nicht richtig.

Es sollte for (j=0; j<=strlen(letter); j++) sein - inkrement auf der dritten Position.

2

In der for-Schleife lautet die Bedingung i ++, die beim ersten Mal als false (0) ausgewertet wird. Sie müssen sie austauschen: for (j=0; j <= strlen(letter); j++)

+0

+1: Antworten Sie hier nur bis jetzt, die versuchen zu erklären, warum die Schleifen keinen Ausgang drucken –

Verwandte Themen