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
makeisWord
在成功时返回字符总数,在失败时返回-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)
返回了错误的值。您在尝试时使用了相反的值。ifcountAlpha==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;
}