0
votes

C: Laissez l'utilisateur remplir un tableau de charret un caractère d'un. Puis imprimez-le

Je veux écrire un programme qui traduit un message saisi par l'utilisateur en b1ff-parler. Cependant, le programme semble s'écraser ici:

#define MAX_LEN 80

char message[MAX_LEN];

printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
    scanf("%c", message[i]);

for (int i = 0; i < MAX_LEN - 1; i++)
    printf("%c", message[i]);


4 commentaires

Qu'est-ce que max_len ?


Vous manquez une ampersand ici: scanf ("% c", message [i]); . Et ne pensez même pas à utiliser obtient . Utilisez fgets à la place


Je pensais que l'utilisation d'Ampersand avec des matrices de caractères est fausse, car le premier élément d'un tableau de charme agit comme un pointeur à l'ensemble de la matrice? Ou je commence quelque chose de mal?


@Pluster vous mélangeez des trucs. Le nom d'un tableau est converti en un pointeur à son premier élément. Fondamentalement, n'utilisez pas l'ampersand lors de la numérisation dans les chaînes telles que: scanf ("% s", message);


3 Réponses :


0
votes

Vous devez transmettre l'adresse à scanf: xxx


0 commentaires

1
votes

Vous devez ajouter une ampersand dans l'instruction SCANF.

scanf("%c", &message[i]);


0 commentaires

0
votes

Le problème est que vous êtes censé passer un pointeur sur scanf . Normalement, vous passez un tableau (qui est un pointeur) ou un pointeur de char (chaîne). Ce que vous faites, c'est en train de passer le caractère lui-même. La méthode n'a aucune possibilité d'écrire quelque chose dans le char, car il est copié avant l'appel de la fonction.

Que se passe-t-il alors est que la méthode interprète le caractère ininitialisé comme une adresse et essaie d'écrire à un emplacement aléatoire qui échoue probablement .

passe simplement l'adresse du caractère: xxx


0 commentaires