我目前正在学习“CS50计算机科学入门”课程,我对C编程还是个新手。我正在做一个简单的协议项目,涉及使用if语句。然而,作为一个初学者,我在编写代码时遇到了一些困难。
如果有任何有C编程经验的人可以伸出援助之手,我将非常感谢您的帮助。下面是我到目前为止尝试过的代码:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int main(void)
{
string username = get_string("What would you like your username to be? ");
string agreement = get_string("Do you agree to the following terms & conditions? ");
if (!strcmp(agreement, "yes" || agreement, "y" || agreement, "Yes" || agreement, "Y"))
{
printf("You can now continue using the service, %s! \n", username);
}
else if (!strcmp(agreement, "no" || agreement, "n" || agreement, "Yes" || agreement, "Y"))
{
printf("You need to agree to the terms & conditions to use the service\n");
}
else
{
printf("You need to select a option\n");
}
}
字符串
下面是当我尝试编译代码时抛出的错误:
Too many arguments for function call. Expected 2, Have 5
型
我试着在谷歌上搜索类似的问题,发现了这样的结果:How to check if variable equal to multiple values但是,我无法解决我的问题。以下是我尝试的代码(不起作用):
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int main(void)
{
string username = get_string("What would you like your username to be? ");
string agreement = get_string("Do you agree to the following terms & conditions? ");
if (str[agreement] == 'yes' || str[agreement] == 'y' || str[agreement] == 'Yes' || str[agreement] == 'Y')
{
printf("You can now continue using the service %s! \n", usename);
}
else if (str[agreement] == 'no' || str[agreement] == 'n' || str[agreement] == 'No' || str[agreement] == 'N')
{
printf("You need to agree to the terms & conditions to use the service\n");
}
else
{
printf("You need to select a option\n");
}
}
型
但我收到了这个错误:
Use of undeclared identifier "str"
型
我很兴奋地学习和欣赏任何指导或提示,你可以提供帮助我在这个项目上取得进展。非常感谢您的时间和支持!
2条答案
按热度按时间bzzcjhmw1#
strcmp
需要两个参数。正如你在第一个例子中所写的,你正在向它传递一堆无意义的东西。相反,进行 * 多个 * strcmp检查,并“或”其结果:
字符串
5fjcxozz2#
因此,错误是由于这一行:
字符串
对
strcmp
的调用被 * 解析 * 为型
因此出现“参数过多”错误。* 应该写成
型
因为看起来你只关心
agreement
的第一个字母,你可以简化一下:型
如果
agreement
包含"Yes"
、"yes"
、"Y"
、"y"
、"YO, ADRIAN!"
、"yup"
等字符串中的任何一个,则此操作将有效。请注意,CS50 * 严重 * 歪曲了C中的字符串操作。C没有实际的
string
数据类型;是CS50库所独有的它是类型char *
的别名(指向char
的指针)。get_string
函数在后台分配内存来存储字符串,并返回一个指向该内存的指针,这就是实际存储在agreement
中的内容:型
在C语言中,string 是一个包含零值终止符的字符值序列。字符串
"yes"
表示为序列{'y', 'e', 's', 0}
。字符串 * 存储 * 在字符类型的数组中。你可以在声明中用字符串 * 初始化 * 一个数组:
型
或者是
型
但是你不能使用
=
操作符将数组相互赋值;这行不通:型
你也可以使用像
strcpy
这样的库函数:型
或单独分配每个元素:
型
类似地,不能使用
==
比较数组内容,必须使用strcmp
或memcmp
等库函数,或者单独比较元素。