这是我给你带来问题的小片段:
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;
}
}
答案 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;
}