strcmp 返回值错误(初学者)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getSentence(char userSentence[]);
int breakSentence_andCompare(char userSentence[] , char compareSentence[]);
#define MAX_SENTENCE 100
int main()
{
int len = 0;
char userSentence[MAX_SENTENCE] = {'o','k',0};
char compareSentence[MAX_SENTENCE] = {'o',0};
getSentence(userSentence);
len = breakSentence_andCompare(userSentence,compareSentence);
}
/*
This function is asking the user to input info.
input:user input string array - char userSentence[].
output:none.
*/
void getSentence(char userSentence[])
{
printf("Hello And Welcome To The Palindrome Cheker Made By xXTH3 SKIRT CH4S3RXx");
printf("nPlease Enter A Sentence: ");
fgets(userSentence,MAX_SENTENCE,stdin);
}
/*
This function takes the input of the user and input it into another string backwards.
input:user input string array - char userSentence[], backward user input string array - char compareSentence[].
output:strcmp value.
*/
int breakSentence_andCompare(char userSentence[] , char compareSentence[])
{
int i = 0;
int z = 0;
int len = 0;
int cmp = 0;
len = strlen(userSentence);
len -= 1;
for (i = len ; i >= 0 ; i--)
{
compareSentence[z] = userSentence[i];
printf("%s",compareSentence);   
z++;    
}
printf("nuser: %s! compare: %s!",userSentence,compareSentence);
cmp = strcmp(userSentence,compareSentence);
printf("n%d",&cmp);
return cmp;
}

该程序检查输入的字符串是否为回文, 简单地解释它是如何工作的:

  1. 它需要用户输入 - 字符串。
  2. 它采用用户字符串,并在另一个字符串中向后输入。
  3. 它比较字符串。

我在函数中有一个非常奇怪的问题,那就是strcmp返回值。出于某种原因,当两个字符串具有相同的字符(如 ABBA)时,strcmp 将返回其中一个字符串的值更大。 我真的很想知道问题是什么以及如何解决它。

附言 当我搜索问题时,我认为它可能与用户输入字符串可能包含来自 enter 键n的事实有关;这可能吗?

请理解,这不是一个完整的代码。代码缺少输出部分。

由于用户输入字符串中的尾随n(换行符)字符而出现问题。

fgets()

fgets() 函数应将字节从流读取到数组中 由 S 指向,直到读取 N-1 个字节或读取A 并传输到 S,或者遇到文件结束条件。 然后,字符串以空字节结尾。[强调我的]

因此,换行符使fgets停止读取,但它被函数视为有效字符并包含在输入字符串中。

假设,用户输入字符串是"ABBA"。因此,输入输入后,userSentence的内容将为"ABBA"。

在程序中,您正在反转输入字符串并将其与原始输入字符串进行比较。

反转后,compareSentence的内容将为"ABBA"。

两个字符串的内容不相同,strcmp()将返回非零值作为比较结果。

有多种方法可以从fgets()输入中删除尾随n(换行符)字符。检查这个。

由于您是初学者,因此给您一个建议 - 不要忽略编译器警告

对于声明 -

printf("n%d",&cmp);

在编译程序期间,您必须收到警告消息。

您应该尝试确定警告消息的原因并解决它们。

有更好的方法来找出字符串是否回文,但由于您是初学者,因此您的开始很好。快乐学习..:)

最新更新