未分配的值

时间:2012-05-22 16:13:49

标签: c

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

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);

}

问题是没有赋值给count变量。我知道有什么不对,但我仍然不知道出了什么问题。

感谢您帮助^^

P.S。我目前正在学习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;

}

}

3 个答案:

答案 0 :(得分:1)

如果count没有递增,那么是因为以下之一:

a)strlen(pChar);返回0

b)if(isWord(pChar, strlen(pChar)))永远不会成真

c)while(pChar)永远无效

您可以通过使用交互式调试器并逐行执行代码来验证哪些有效,哪些无效。

根据自首次发布以来的其他更改,您的isWord功能似乎遇到了麻烦。似乎函数返回的是你想要的相反值。更改它以便if(countAlpha == i)返回1(对于true)并且其else返回0(对于false)。

答案 1 :(得分:0)

fgets可能会存储一个新行字符,因此isWord返回false,因为isalpha('\ n')为false。

答案 2 :(得分:0)

小片段可能带有一些代码解释:)

按照其他人指出的方式,问题在于函数isWord的返回值。但更重要的是,为什么你要做所有这些工作?

如果单词由所有字母组成,则函数isWord应该计算。如果是这样返回成功代码其他失败代码。成功的主要功能将增加字符串strlen的计数。

但这一切都是必要的吗?

更改建议:而不是返回错误代码或成功代码,然后strlen使isWord返回成功时的字符总数,并在失败和-1时返回count因此。这将为您节省strlen函数调用:)

这似乎好多了:)你不同意吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isWord(char string[], int length){

int i = 0,countAlpha = 0;

for(; i < length - 1; i++){

    if(!isalpha(string[i])){

        countAlpha = -1;
        break;

    }else {

        countAlpha++;

    }

}

return countAlpha;

} 

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

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

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

// Suddivido la stringa nelle varie parole
pChar = strtok(string, " ");

while(pChar){

    if( (ret=isWord(word, strlen(word))) != -1){

        count += ret;

    }

    pChar = strtok(NULL, " ");  

}

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

return 0;
}