0

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

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

}

问题是没有为计数变量分配任何值。我知道有问题,但我仍然不知道出了什么问题。

谢谢帮忙^^

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

PPS 根据要求,这里是 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;

}

}

4

3 回答 3

1

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

a)strlen(pChar);返回 0

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

c)while(pChar)永远无效

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

根据您自首次发布以来的其他更改,看来问题出在您的isWord功能上。似乎该函数返回的值与您的意思相反。更改它,以便if(countAlpha == i)返回 1(表示真)和它的else返回 0(表示假)。

于 2012-05-22T16:21:27.340 回答
0

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

于 2012-05-22T16:25:54.440 回答
0

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

顺便说一句,正如其他人指出的那样,问题出在函数的返回值上,isWord但更重要的是,您为什么要做所有这些工作?

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

但这都是必要的吗?

建议的更改:而不是返回错误代码或成功代码,然后返回成功和失败的字符总数strlen并相应地增加。这将为您节省函数调用:)isWord-1countstrlen

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

#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;
}
于 2012-05-23T18:40:24.213 回答