1
votes

essayer d'écrire un compteur de lettres en C

J'essaie de créer un programme qui compte le nombre de lettres que l'utilisateur a saisies. Lorsque j'exécute mon programme, il indique error: expected ';' après l'expression sur la ligne count_letters () {// écriture de la fonction pour compter le nombre de lettres ? Une fonction a-t-elle besoin d'un point-virgule à la fin? J'ai aussi le sentiment que je n'aborde pas correctement ce problème, quelqu'un peut-il m'éclairer :(

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>

int count_letters(); //function to count letters
int number_of_letters; //length of the string input
int letterCount; // counter for number of letters in the string input

int main(void) {
    string text = get_string("Text: "); // getting string input
    number_of_letters = strlen(text); //storing the length of string here
    printf("Number of letters: %i\n", letterCount); //printing the number of letters in the string input

    count_letters() { // writing the function to count number of letters
        for (int i = 0; i < number_of_letters; i++) {
            if (isalpha(text[i])) {
                letterCount++;
            }
        }
    }
}


5 commentaires

Que doit être count_letters () {... ? Une fonction distincte? Vous ne pouvez pas le mettre au milieu de main () .


@ John3136 J'essayais d'écrire la fonction pour compter le nombre de lettres, à l'intérieur de main () ._. Dois-je le mettre dehors alors? Mais dans ce cas, n'aurais-je pas besoin de mettre string text = .... à l'extérieur également ..?


Regardez votre manuel / notes de cours / quoi que ce soit. Vous appelez des fonctions dans main mais vous ne pouvez pas les déclarer ici.


C ne prend pas en charge les fonctions imbriquées.


Pour commencer: strlen () renvoie size_t pas int .


4 Réponses :


1
votes
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int count_letters(); //function to count letters
int number_of_letters; //length of the string input

//initialize letterCount to 0 so that doing letterCount++ does not add 1 to a garbage value
int letterCount = 0; // counter for number of letters in the string input

//define string as a global value if you don't want to refer to it again and again by pass it as parameter or reference
string text;

void count_letters() { //since it's not returning anything, it's void not integer
    for(int i = 0; i < number_of_letters; i++) {
        if(isalpha(text[i])
            letterCount++;
    }
}
int main(void){

    text = get_string("Text: "); // getting string input
    number_of_letters = strlen(text); //storing the length of string here
    printf("Number of letters: %i\n", letterCount); //printing the number of letters in the string input
}
Hope this helps. All the comments are there where any modifications are made

0 commentaires

1
votes

Je pourrais considérer que vos connaissances sont trop basiques, pardonnez-moi si c'est le cas.

Je crois que vous avez commis une petite erreur, peut-être due au fonctionnement d'une autre langue. Le problème réside dans la façon dont vous avez déclaré count_letters ().

Pour déclarer correctement une fonction en C, sortez d'abord de toute fonction existante, puis entrez n'importe quel type de variable comme type de retour pour votre fonction, le nom de votre fonction, puis, entre parenthèses, les paramètres de votre fonction. Et après cela, le code de votre fonction peut être inséré entre crochets, comme vous l'avez fait.

Notez que vous pouvez également déclarer la fonction sans le code, puis mettre le code de la fonction plus bas.

Et vous pouvez également déclarer votre chaîne en externe pour éviter de traiter des pointeurs.

Voici un exemple de déclaration de fonction:

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>

void count_letters(); //function to count letters

int number_of_letters; //length of the string input
int letterCount; // counter for number of letters in the string input
string text;

int main(void) {
    text = get_string("Text: "); // getting string input
    number_of_letters = strlen(text); //storing the length of string here
    count_letters();
    printf("Number of letters: %i\n", letterCount); //printing the number of letters in the string input
}

void count_letters() { // writing the function to count number of letters
    for (int i = 0; i < number_of_letters; i++) {
        if (isalpha(text[i])) {
            letterCount++;
        }
    }
}

Par conséquent, votre code devrait ressemble un peu à ceci:

int foo(int amount)

Maintenant, excusez-moi si je n'ai pas compris ou répondu correctement à votre question, ce serait avec plaisir que je m'améliorerais si je pouvais obtenir plus de détails. Faute de la bibliothèque cs50.h, je ne peux pas savoir avec certitude que mon code fonctionne.


2 commentaires

Que doit faire ce * letterCount ++ ? Cela ne compile pas. Vous voulez letterCount ++ , n'est-ce pas?


@alk Oh, désolé. Je ne sais pas pourquoi je l'ai même mis comme un pointeur, fixe.



1
votes
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int count_letters(char *); //function to count letters

int main(void)
{

    char* text = get_string("Text: "); // getting string input
    printf("Number of letters: %i\n", count_letters(text)); //printing the number of letters in the string input
}

int count_letters(char *text)
{ // writing the function to count number of letters

    int letterCount,number_of_letters; //length of the string input
    number_of_letters = strlen(text); //storing the length of string here

    for(int i = 0; i < number_of_letters; i++){
        if(isalpha(text[i]))
         {
            letterCount++;
         }
 return letterCount;
}

1 commentaires

Vous avez oublié de déclarer letterCount et number_of_letters n'a pas besoin d'être global - vous pouvez simplement le mettre dans count_letters aussi



3
votes

Bien que vous soyez libre d'utiliser strlen pour obtenir le nombre initial de caractères dans text , ce n'est pas nécessaire. En C, le dernier caractère d'une "chaîne" est le caractère de terminaison nul '\ 0' (qui a la valeur ASCII de 0 ). C'est ce qui différencie un tableau normal de caractères d'une chaîne. C'est ainsi que toutes les fonctions de chaîne savent quand arrêter la recherche de caractères.

Vous n'avez donc pas besoin de savoir à l'avance combien de caractères il y a dans une chaîne. Par exemple, prenez la chaîne "bonjour" saisie à l'invite "Texte:" là où vous avez déclaré.

$ ./bin/ltrcountcs50
Text: hello world
Number of letters: 10

Lorsque vous saisissez "bonjour" à l'invite:

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

int count_letters (string s)
{
    int n = 0;

    while (*s)                  /* while not the nul-character */
        if (isalpha (*s++))     /* check if current is letter, advance ptr */
            n++;                /* increment letter count */

    return n;                   /* return letter count */
}

int main (void) {

    string text = get_string ("Text: ");

    printf ("Number of letters: %d\n", count_letters(text));
}

La chaîne est stockée en mémoire sous le nom:

int main (void) {

    string text = get_string ("Text: ");

    printf ("Number of letters: %d\n", count_letters(text));
}


0 commentaires