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++; } } } }
4 Réponses :
#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
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.
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.
#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; }
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
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)); }
Que doit être
count_letters () {...
? Une fonction distincte? Vous ne pouvez pas le mettre au milieu demain ()
.@ 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 ()
renvoiesize_t
pasint
.