尝试创建将用户输入字符串与 C 中的一组预定义输入字符串进行比较的程序



我目前正在开发一个程序,该程序会将一组输入字符串与用户输入进行比较。唯一的条件是不允许我使用内置字符串操作;我必须从头开始编写它们。

输入字符串是一个字符串数组,如下所示:

char *input_strings[] = { 
"Hello", "What is your name?", "How are you?", "Bye"
};

我目前拥有的是一堆功能:

1) uppercheck,它检查一个值是否为大写:

int uppercheck(int c){
return (c >= 'A' && c <= 'Z');
}

2) 小写,将值转换为小写:

int lowercase(int c){
if (uppercheck(c)){
c + 0x20;
}
else{
c;
}
}

3) compstr,它比较两个小写字符串:

int result;
int compstr(char str1[], char str2[]){
for(int i = 0; str1[i]; i++){
if (lowercase(str1[i]) == lowercase(str2[i])){
result = 1;
}
else{
result = 0;
}
}
return result;
}

我的代码的后半部分检查用户字符串是否等于 input_strings 数组中的每个条目,如下所示:

char input[100]; // user input string
while (1) // infinite loop
{ 
//Get the input string
printf("> ");
fgets(input, 100, stdin);
// comparing strings:
//3 base input conditions:
if (compstr(input_strings[0], input) == 1)
{
printf("Hellon");
}
else if (compstr(input_strings[1], input) == 1)
{
printf("My name is Namen");
}
else if (compstr(input_strings[2], input) == 1)
{
printf("I am finen");
}
//exit condition:
else if (compstr(input_strings[3], input) == 1) 
{
printf("Byen"); 
break;
}
//invalid input:
else 
{   
printf("I do not understandn");
}
}
return 0;

我的问题是程序将为任何输入输出"Hello",即使根本没有输入。我以为比较函数会确保两个字符串相同,但它似乎不起作用,我不确定如何从这里开始处理它。抱歉,如果我过度编写代码,但我想我会添加尽可能多的信息。任何帮助将不胜感激!

总之,您忘记在lowercase函数中编写return,并且您没有在result = 0;之后放置break;,代码应该可以正常工作。

解释:

代码中只有一个地方打印Hello因此我们知道表达式printf("Hellon")在每个循环中都在执行。这意味着紧靠此表达式上方的if语句每次都会被计算为true,这只有在函数compstr()始终返回1而不管input是什么时才会发生这种情况。现在,让我们深入了解compstr()函数,看看1来自哪里。

好吧,如果lowercase(str1[i])变量result等于lowercase(str2[i]),则变量设置为1。好的,所以我们的问题是lowercase(str1[i])总是和lowercase(str2[i])一样。检查您的lowercase()功能。您根本没有在函数中编写任何 return 语句,因此无论c是什么,它都将始终返回垃圾编号。基本上,您所要做的就是将c + 0x20;更改为return c + 0x20;c;更改为return c;。就是这样。非常简单的错误。

现在,更大的问题是,在compstr()函数中分配result = 0;后,您没有 break 语句,如下所示:

...
else{
result = 0;
break;
}
...

为什么这个休息很重要?好吧,只有当str1str2长时才有意义.看,for循环的终止条件只涉及str1,所以即使我们到达str2中的最后一个字符,如果str1长于str2,我们仍然会继续循环。让我们看一个示例场景。让我们运行程序并键入Hello。程序将Hello存储在input中,就像这样input = {'H', 'e', 'l', 'l', 'o', '', ...},然后用compstr()检查第一个输入条件并打印Hello。现在键入Bye.现在,数组input{'B', 'y', 'e', '', 'o', '', ...}。注意到Helloo还在那里吗?compstr中的for循环将result设置为在第一个字符比较时0,这很好,但没有中断,即使在比较Bye中的最后一个e后,它也会继续循环,因为您正在将其与具有 5 个字符而不是 3 个字符的Hello进行比较。在最后一个循环中,您的if语句将比较Hello的第 5 个字符和Bye的第 5 个字符,这是两者的字母o。所以result在循环结束时设置为1,所以compstr函数返回1然后程序打印Hello而不是Bye,即使你输入了Bye,因为ByeHello短。尝试,How are you?,它会正常打印I am fine,但现在如果你输入HelloBye,你仍然会得到I am fine,因为input看起来像这样:'H', 'e', 'l', 'l', 'o', '', 'e', ' ', 'y', 'o', 'u', '?', '' ....最后的e you?是当我们How are you?存储在这个相同的input变量中时,几步后的垃圾值。

相关内容

  • 没有找到相关文章

最新更新