2012-05-09 12 views
6

Ho appena iniziato con C e stavo provando alcuni esempi dal libro di Ritchie. Ho scritto un piccolo programma per capire array di caratteri, ma sono imbattuto in alcuni errori, e speravo in una certa comprensione su quello che ho capito male:C principiante di programmazione - Si prega di spiegare questo errore

#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]); 
} 

L'output è:

$ ./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.. 

Che cosa è succedendo? Perché il ciclo for non fornisce alcun output?

risposta

11

La sintassi dovrebbe essere;

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

Dal strlen è funzionamento costy, e di non modificare la stringa all'interno del ciclo, è meglio scrivere come:

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

Inoltre, è fortemente recommanded di controllare sempre di buffer overflow quando lavorando con C-stringhe e immessi dall'utente:

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

+1 per raccomandare il controllo associato all'array –

+0

Grazie anche per questo suggerimento. Aggiungerò presto i controlli degli errori. Ho pensato di cancellare le basi. Guarda come ho sbagliato anche nella sintassi di! :) – Droidzone

7

L'errore è nel per, semplicemente scambiare la condizione finale e l'incremento in questo modo:

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

Domanda: cosa è che l'ultimo personaggio?

+0

'j

+0

@ another.anon.coward: certo, ma penso che vedere il terminatore nullo sia vantaggioso per l'op – BlackBear

+0

Immagino tu abbia ragione! ^^ –

3

Il formato corretto for ciclo è:

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

in modo che il ciclo for dovrebbe essere

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

for (j=0;j++;(j<=strlen(letter))) non è corretto.

Deve essere for (j=0; j<=strlen(letter); j++) - incremento nella terza posizione.

2

Nel ciclo for, la condizione è i ++, che restituisce false (0) la prima volta. È necessario scambiarli: for (j=0; j <= strlen(letter); j++)

+0

+1: rispondi solo qui fino ad ora che prova a spiegare perché i loop non stampano alcun output –

Problemi correlati