Je suis nouveau dans le langage C et j'essaie de lire un caractère et une chaîne (une phrase; longueur max 25) d'un utilisateur.
Vous ne savez pas ce que je fais mal dans les lignes de code suivantes, cela me donne une erreur "Segment Fault".
#include <stdio.h>
int main(){
char * str[25];
char car;
printf("Enter a character: ");
car = getchar();
printf("Enter a sentence: ");
scanf("%[^\n]s", &str);
printf("\nThe sentence is %s, and the character is %s\n", str, car);
return 0;
}
Merci!
str
est un tableau de 25 pointeurs vers char
, pas un tableau de char
. Alors changez sa déclaration en
char str[25];
Et vous ne pouvez pas utiliser scanf
pour lire des phrases - cela arrête la lecture au premier espace, utilisez donc fgets
pour lire la phrase à la place.
Et dans votre dernier printf
, vous avez besoin du %c
spécificateur pour imprimer les caractères, pas %s
. Vous devez également vider l'entrée standard, car il y a un '\n'
restant dans stdin
, vous devez donc supprimer ces caractères.
Le programme révisé est maintenant
#include <stdio.h>
void flush();
int main()
{
char str[25], car;
printf("Enter a character\n");
car = getchar();
flush();
printf("Enter a sentence\n");
fgets(str, 25, stdin);
printf("\nThe sentence is %s, and the character is %c\n", str, car);
return 0;
}
void flush()
{
int c;
while ((c = getchar()) != '\n' && c != EOF)
;
}
Vous devez apporter quatre modifications:
Changement
char * str[25];
à
char str[25];
comme vous voulez un tableau de 25 char
s, pas un tableau de 25 pointeurs vers char
.
Changement
char car;
à
int car;
as getchar()
renvoie un int
, pas un char
.
Changement
scanf("%[^\n]s", &str);
à
scanf( "%24[^\n]", str);
qui dit à scanf
de
'\0'
) Ou jusqu'à un \n
Et stockez-le dans str
.Changement
printf("\nThe sentence is %s, and the character is %s\n", str, car);
à
printf("\nThe sentence is %s, and the character is %c\n", str, car);
comme spécificateur de format correct pour un char
est %c
, pas %s
.