Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未分配的值_C - Fatal编程技术网

C 未分配的值

C 未分配的值,c,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

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

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变量赋值。我知道有什么不对劲,但我还是不知道是什么不对劲

谢谢你的帮助^^

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

p.p.S.根据要求,这是isWord的功能:(不要用意大利语评论)

//Controlla seèuna parola
int-isWord(字符字符串[],int-length){
int i=0;//续
int countAlpha=0;//Se il-carattereèalfabetico.Non-vengono
//假释金额
//在最后一克拉克拉的列车上行驶
//斯特林加终结者酒店
对于(i;i

}

如果
计数
不递增,则是由于以下原因之一:

a)
strlen(pChar)返回0

b)
if(isWord(pChar,strlen(pChar)))
从来都不是真的

c)
while(pChar)
永远无效

通过使用交互式调试器并在代码执行时逐行检查代码,可以验证哪些工作正常,哪些不工作


根据您自第一次发布以来所做的其他更改,问题似乎出在您的
isWord
功能上。似乎函数返回的值与您的意思相反。更改它,使
if(countAlpha==i)
返回1(为true),其
else
返回0(为false)。

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

小片段可能附带一个小代码解释:)

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

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

但这一切都是必要的吗

建议的更改:不要返回错误代码或成功代码,然后执行
strlen
make
isWord
在成功时返回字符总数,在失败时返回
-1
并相应增加
计数。这将在
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;
}
#包括
#包括
#包括
int-isWord(字符字符串[],int-length){
int i=0,countAlpha=0;
对于(;i
最有可能的是iWord永远不会返回
true
。我们可以看到iWord以及您的输入字符串吗?如果这是家庭作业,请添加家庭作业标记。我的错误是,iWord函数中(i;i必须是(i;i。我是个笨蛋,很抱歉:(
if(countAlpha==I)
返回了错误的值。您在尝试时使用了相反的值。if
countAlpha==I
应该
返回1
(对于true),而
否则
应该
返回0
(对于false).实际上,该函数返回的是您想要的结果的倒数。Sei il terzo italiano che trovo su StackOverflow;)
#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;
}