这是给我带来问题的小片段:

int main(int argc, char** argv) {

char string[75] = {0};
char *pChar;
int count = 0;

printf("String: ");
fgets(string, sizeof string, stdin);

printf("Numero parole: %d\n", countWords(string, strlen(string)));

// Suddivido la stringa nelle varie parole
pChar = strtok(string, " ");
while(pChar){
    if(isWord(pChar, strlen(pChar))){

        count += strlen(pChar);

    }
    pChar = strtok(NULL, " ");

}

printf("Lettere totali: %d\n", count);

return (EXIT_SUCCESS);


}

问题在于没有值被分配给计数变量。我知道出了点问题,但我仍然不知道出了什么问题。

感谢您的帮助^^

附言我目前正在学习C,所以这可能是一个愚蠢的问题。

P.P.S.根据要求,这里是isWord函数:(不要介意它们是意大利语的)

// Controlla se è una parola
int isWord(char string[], int length){

int i = 0;                  // Contatore
int countAlpha = 0;         // Se il carattere è alfabetico. Non vengono
                            // contate le parole che contengono numeri

// Inizio scorrendo tutta la stringa tranne l'ultimo carattere che è un
// terminatore di stringa
for(i; i < length - 1; i++){

    // Se il carattere è alfabetico allora aumento il contatore isAlpha
    if(isalpha(string[i])){

        countAlpha++;

    // Altrimenti il carattere non è una lettera
    } else {

        countAlpha = 0;

    }

}

if(countAlpha == i){

    return 0;

} else {

    return 1;

}


}

最佳答案

如果count没有增加,则是由于以下原因之一:

a)strlen(pChar);返回0

b)if(isWord(pChar, strlen(pChar)))永远不是真的

c)while(pChar)永远无效

您可以通过使用交互式调试器并在执行时逐行逐步验证代码来验证有效的方法和无效的方法。

根据自首次发布以来的其他更改,看来问题出在您的isWord函数中。似乎该函数返回的是您想要的相反值。对其进行更改,以使if(countAlpha == i)返回1(对于true),而其else返回0(对于false)。

10-08 08:32