2013-07-15 2 views
0

Salut J'ai une question sur les données inputing dans un tableauscanf nouvelle ligne magasin comme le premier élément du tableau

pourquoi ne dans le premier élément scanf magasin '\n' du tableau dans ce code?

#include <stdio.h> 
#include <stdlib.h> 
#define MAX 10 
int main (void) 
{ 
    // Global declarations 
     int str_length; 
     char str[MAX]; 
     int count; 
     char temp; 
    // Statements 

     // prompt user for string length 
     printf("Enter string length: "); 
     scanf("%d", &str_length); 

     printf("Enter string: "); 
     // input string 
     for(count = 0; count < str_length; count++) 
     { 
      scanf("%c", &str[count]); 
      printf("%c", str[count]); 
     } 

     for(count = 0; count < str_length; count++) 
     {  
      temp = str[0]; // set temp to the first element 
      str[count] = str[count+1]; // set the next element to be the first element 
      str[str_length-1] = temp; // swap the first element and the last element 
      puts(str); 
     } 


    system("PAUSE"); 
    return 0; 
} 

quand je 1234567890 entrée dans le tableau au lieu de 1 étant le premier élément, le premier élément est le caractère de saut de ligne '\n' place.

merci d'avance pour l'aide.

Répondre

1

Parce que quand vous arrivez à ce ici

scanf("%d", &str_length); 

et le type d'utilisateur 4 quelque chose comme suivi d'entrer, votre tampon rempli de 4\n. Le 4 passe à str_length et le \n reste sur le tampon. Vous devez nettoyer le tampon, en ajoutant simplement:

fflush (stdin); 

Avis que lorsque declear char str[MAX] et l'utilisateur d'entrer Char en, vous devez ajouter terminatior null à la fin de la chaîne. Juste ajouter

str[str_length] = '\0'; 
0

Vous semblez ne pas avoir consommé \ n après avoir la longueur sur les lignes

// prompt user for string length 
    printf("Enter string length: "); 
    scanf("%d", &str_length); 

Tout ce que vous avez besoin de faire est d'ajouter un scanf d'un% c juste après cette ligne et mettre au rebut.

+0

que voulez-vous dire par comsumed le \ n? Pouvez-vous s'il vous plaît expliquer en détail parce que je veux vraiment savoir la raison pour laquelle printf n'a pas consommé \ n. merci beaucoup – bluebk

+0

scanf lit à partir de stdin, où vous tapez un nombre suivi de \ n. scanf d'un% d ne consommera pas le \ n final. Vous devez le consommer et le jeter. –

Questions connexes