C 未获取任何输出(应为布尔输出)
所以我试着不使用string.h文件。我创建了有效的字符串长度函数。然后我创建了一个函数来检查两个函数是否相同,但我没有得到任何输出。 我已经测试了string-length函数,这很有效。我不确定我在第二个函数中做错了什么。请指出错误C 未获取任何输出(应为布尔输出),c,equality,c-strings,return-type,function-definition,C,Equality,C Strings,Return Type,Function Definition,所以我试着不使用string.h文件。我创建了有效的字符串长度函数。然后我创建了一个函数来检查两个函数是否相同,但我没有得到任何输出。 我已经测试了string-length函数,这很有效。我不确定我在第二个函数中做错了什么。请指出错误 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> char stringLength(char userString[]) { int i=0,c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
char stringLength(char userString[])
{
int i=0,count=0;
while (userString[i] != '\0')
{
count = (count + 1);
i = (i + 1);
}
return count;
}
bool stringCheck (char a[], char b[])
{
bool isEquals = false;
if (stringLength(a) == stringLength(b))
{
int i=0, count=0;
while (i<stringLength(a))
{
if (a[i] == b[i])
{
count+=1;
}
i+=1;
}
if (count == stringLength(a))
isEquals = true;
else
isEquals = false;
}
else
isEquals = false;
return isEquals;
}
int main()
{
stringCheck("abcd", "abcd");
return 0;
}
#包括
#包括
#包括
char-stringLength(char-userString[])
{
int i=0,count=0;
while(userString[i]!='\0')
{
计数=(计数+1);
i=(i+1);
}
返回计数;
}
布尔字符串检查(字符a[],字符b[]
{
布尔等质量=假;
如果(stringLength(a)=stringLength(b))
{
int i=0,count=0;
而(i该函数起作用
只是您没有捕获stringCheck()
函数的返回值。您可以按如下所示执行此操作
bool strMatch = stringCheck("abcd", "abcd");
if(true == strMatch)
{
// Do something when the strings are same
}
else
{
// Do something else otherwise
}
另外,作为对stringCheck()
函数的改进,您有一个循环
while (i < stringLength(a))
这将起作用,因为字符串的长度在循环中不会改变
<>我发现了问题>代码> StRINGLINTHOST()/Cux>函数。首先,用于返回长度的变量的数据类型<代码>计数>代码>是代码> int <代码>,而函数的返回类型集是“代码> char < /代码>。此外,考虑更改函数的返回类型<代码> StRINGLINTHOST()
到大小
以及同一函数中变量计数的数据类型
char stringLength(char userString[])
到
如果返回类型为char
,则如果字符串长度超过127字节,则函数将出现错误
stringLength()
函数的下一个改进是,i
和count
似乎同时更新。我想不出当您可以简单地返回i
而不是count
时,为什么需要两个变量
如果您首先使用某些gcc标志(如-Wall
)编译代码,编译器会警告您所有这些问题。正如@wedapasi所说,您的代码可以工作。您只需要使用结果
但是,您的代码过于复杂。完全没有理由在第一个函数中使用两个变量。此外,第一个函数不应返回字符(除非您希望该函数不处理长度超过127或255个字符的字符串),而是使用int
或者最好使用size\u t
。这样做:
size_t stringLength(char userString[])
{
int count=0;
while (userString[i] != '\0')
count++;
return count;
}
对于第二个函数,比较它们的长度只是浪费时间。下面是一个更简单的实现:
bool stringCheck (char a[], char b[])
{
size_t index = 0;
while(a[index] != '\0') {
if(a[index] != b[index]) return false;
index++;
}
return true;
}
如果需要,还可以添加一些检查参数是否为空指针。您没有使用main
中函数stringCheck
的返回值
int main()
{
stringCheck("abcd", "abcd");
return 0;
}
至少你可以写一些例子
int main( void )
{
printf( "Strings are %sequal\n", stringCheck("abcd", "abcd") ? "" : "not " );
return 0;
}
除此之外,您的代码效率非常低,通常甚至可以调用未定义的行为
例如,函数stringLength
将返回超过127
或255
个字符的字符串长度不正确,这取决于类型char
的行为是否与类型signed char
或unsigned char
相同
该函数应该声明为
size_t stringLength( const char userString[] )
{
size_t count = 0;
while ( userString[count] != '\0' ) ++count;
return count;
}
或者,例如在函数stringCheck
中,为循环中变量i
的每个值调用函数stringLength
int i=0, count=0;
while (i<stringLength(a))
^^^^^^^^^^^^
当从main
调用时,您没有存储stringCheck
的返回值。那么您如何确定函数失败?如果这不是问题,请在调试器中逐行检查代码。另一方面,在同一个字符串上多次调用stringLength
效率低下。最好存储t另一方面注意:对于stringLength
使用返回类型char
forstringLength
意味着在某些平台上,它只适用于长度不超过127个字符的字符串,而在某些其他平台上,它只适用于长度不超过255个字符的字符串。因为您使用的是int
变量d长度,最好使用返回类型int
(实际上,最好使用size\u t
而不是int
,因为这与strlen
函数匹配。)没有产生任何形式输出的函数可以解释为什么没有输出。是的,我意识到我把它弄得太复杂了。我刚开始学习C语言。非常感谢你指出了更好的解决方案!
size_t stringLength( const char userString[] )
{
size_t count = 0;
while ( userString[count] != '\0' ) ++count;
return count;
}
int i=0, count=0;
while (i<stringLength(a))
^^^^^^^^^^^^
bool stringCheck( const char *s1, const char *s2 )
{
while ( *s1 && *s1 == *s2 )
{
++s1;
++s2;
}
return *s1 == *s2;
}