2017-05-01 1 views
0

Je me demande quel est le problème avec mon code. J'utilise normalement scanf mais j'essaie d'obtenir le coup de fgets. Mais quand j'essaye d'imprimer un tableau char où chaque élément du tableau est sur une ligne séparée, mais même si j'ai défini la limite du tableau comme un nombre arbitrairement élevé, il a seulement une limite de onze lignes. Je suis un programmeur débutant alors essayez d'être aussi simple que possible.Impression d'un tableau de caractères

#include <stdio.h> 
#define max_line 4096 
int main(void) { 
    char str[max_line]; 
    printf("Enter string: "); 
    fgets(str, max_line, stdin); 
    for (int i=0;i <max_line && i!='\n'; i++) { 
     printf("%c\n", str[i]); 
    } 
    return 0; 
} 

Je suis désireux d'obtenir un résultat comme celui-ci.

Enter string: Hello 
H 
e 
l 
l 
o 

Mais il se trouve tout à fait différemment

Enter string: Hello 
H 
e 
l 
l 
o 
/n //Sorry, I don't know how to add new lines in stackoverflow, but I think you get the idea. 
/n 
/n 
/n 
/n 
+3

'i = '\ n'' -> str [i] =! \ N'' – BLUEPIXY

+0

Donc, dans mon état, je change juste droite? – danielwestfall

+0

Pourquoi 'i! = '\ N''? Comeon, réfléchis-y deux fois! ;-) Vous voulez tester exactement * quoi * pour ne pas être une nouvelle ligne? – alk

Répondre

2

Vous devez vérifier que str[i] est DIFFÉRENT-'\n' au lieu de vérifier i!='\n'. Comme @BLUEPIXY l'a souligné, cela signifie que i! = 10, étant '\ n' égal à 10 dans le code ASCII.

changer Ainsi, la condition:

for (int i=0;i <max_line && str[i]!='\n'; i++) { 
-2

Essayez ce code

int main(void) { 
    int i; 
    char str[max_line]; 
    memset(str, 0x0, max_line); 
    printf("Enter string: "); 
    fgets(str, max_line, stdin); 
    for (i=0;i < strlen(str) ; i++) { 
     printf("\n%c", str[i]); 
    } 
    return 0; 
} 

A la fin (après Bonjour), null ombles pas là, d'où la sortie indésirable.

+0

Veuillez voir les commentaires à l'OP. – alk

+0

Désolé, code modifié. – Kamal