0
votes

Comment définir une variable de type "N" en C lorsque N c'est une entrée de C et qu'elle est également définie par une fonction d'entrée (N invitera l'utilisateur à entrer)

Je suis encore nouveau dans la programmation et très très nouveau dans la programmation C, alors pardonnez-moi si ma question semble ridicule.

J'apprends les fonctions et les appels de fonction et j'essaye de suivre ce que l'instructeur fait mais avec un petit ajout. L'instructeur a fait ce qui suit:

  • L'instructeur a défini une fonction toux - (void cough (int N))
  • J'ai appelé la fonction dans main en utilisant une seule ligne de code
  • Le programme imprime la toux un nombre codé de fois à l'écran, c'est-à-dire que la toux (3) imprimera la toux 3 fois.

J'essaye de:

  • Définir une fonction toux - (void cough (int))
  • Appelez la fonction dans main en utilisant une seule ligne de code
  • Le programme doit afficher la toux N nombre de fois à l'écran, mais doit être obtenu lorsque le programme démarre avec une invite, par exemple "Combien de toux?"

Le C (c99) que j'utilise a une bibliothèque cs50.h (du cours en ligne cs50), qui fournit un code pour obtenir une entrée entière. Après avoir cherché et essayé, j'ai réussi comme ci-dessous:

Après avoir inclus la bibliothèque cs50 int N = get_int ("Combien de toux") toux (N)

Et aussi toux (get_int ("Combien de toux"))

Je me demande seulement pourquoi je ne peux pas utiliser avec succès le code ci-dessous en C sans obtenir une erreur. Pourquoi N ne peut-il pas être généré à partir de la fonction?

L'erreur que j'ai obtenue est --- l'utilisation de l'identifiant non déclaré 'N'

void cough(int N);
int main(void)
{
    cough(N);
}

void cough(int N)
{
    N = get_int("How many coughs?\n");
    for (int i = 0; i < N; i++)
    {
        printf("cough\n");
    }
}

Merci pour lire la longue histoire et fournir des conseils.


0 commentaires

4 Réponses :


0
votes

Vous pouvez essayer ceci, mais je n'ai pas utilisé get_int()

void cough(int N);
int main(void)
{
    int N = 0;
    scanf( "%d", &N );
    cough(N);
}

void cough(int N)
{
    printf("How many coughs?\n");
    for (int i = 0; i < N; i++)
    {
        printf("cough\n");
    }
}


1 commentaires

Merci beaucoup d'avoir pris le temps d'expliquer.



0
votes

Lorsque vous écrivez un programme en C, vous ne pouvez que les identifiants qui ont été définis précédemment ... ou, bien sûr, lorsque vous les définissez.

Alors travaillons avec votre code ligne par ligne

#include <stdio.h>
#include "cs50.h"

int cough(void);
int main(void)
{
    cough();
}

void cough(void)
{
    int N = get_int("How many coughs?\n");
    for (int i = 0; i < N; i++)
    {
        printf("cough\n");
    }
}

void déjà défini: un mot-clé de langue
toux elle est (provisoirement) définie ici
int déjà défini: un mot-clé de langue N il est (provisoirement) défini ici. Cette définition est valide jusqu'à la prochaine parenthèse fermée car c'est une définition de paramètre

    cough(N);

main est en cours de définition ici

int main(void) {


2 commentaires

Wow, merci beaucoup pour le guide étape par étape. Bruno a beaucoup aidé avec sa réponse et son guide et vous m'avez aidé à mieux comprendre avec l'explication du compilateur. J'apprécie vraiment le temps que j'ai pris pour m'aider à comprendre le concept.


Heureux d'avoir pu aider. Bon codage!



1
votes

Je me demande seulement pourquoi je ne parviens pas à utiliser avec succès le code ci-dessous en C sans obtenir une erreur.

utilisation de l'identifiant non déclaré 'N'

car dans

void cough(int N);
int main(void)
{
    cough(get_int("How many coughs?\n"));
    return 0;
}

void cough(int N)
{
    for (int i = 0; i < N; i++)
    {
        printf("cough\n");
    }
}

N n'est pas défini dans main comme une variable locale, et ce n'est pas un variable globale aussi, donc vous ne pouvez pas compiler votre code

mais devrait être obtenu lorsque le programme démarre avec une invite, par exemple "Combien de toux?"

so

N = get_int("How many coughs?\n");

doit être déplacé dans main

Enfin, vous voulez quelque chose comme ça:

int main(void)
{
    cough(N);
}

Notez votre printf imprime une chaîne constante, vous pouvez donc la remplacer par met ("cough"); qui est un peu plus rapide car printf recherche ' % 'pour rien dans ce cas


1 commentaires

Merci beaucoup d'avoir pris le temps d'expliquer avec des détails et un guide d'aide. J'apprécie également la perspicacité supplémentaire sur l'utilisation de met au lieu de printf, je l'ai vu avec scanf et je me suis souvent demandé quoi utiliser, je commencerai à utiliser des put à partir de maintenant chaque fois que je dois imprimer une constante.



0
votes

Vous devez définir N dans main (qui, d'ailleurs, est totalement indépendant de N dans toux code>. Par exemple:

int main(void)
{
    int N = 5;
    cough(N);
{

Vous pouvez également utiliser cough (5) ou définir N comme étant global.


0 commentaires