Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C(扫描频率)中的区分大小写(如果/其他)_C_If Statement_Scanf_String Comparison_Case Sensitive - Fatal编程技术网

C(扫描频率)中的区分大小写(如果/其他)

C(扫描频率)中的区分大小写(如果/其他),c,if-statement,scanf,string-comparison,case-sensitive,C,If Statement,Scanf,String Comparison,Case Sensitive,我脚本的这一部分工作正常,除了输入“blue”完成if语句,但输入“blue”被认为是其他语句。我很难用| |来表示“蓝色”或“蓝色”是可以接受的。如果有人能提供一些指导,我们将不胜感激。我刚开始学C printf("What is your favorite color?\n"); scanf("%s", &color); if (strcmp(color, "blue") == 0) { printf("Your favorite color is %s. Me too!\n\n

我脚本的这一部分工作正常,除了输入“blue”完成if语句,但输入“blue”被认为是其他语句。我很难用| |来表示“蓝色”或“蓝色”是可以接受的。如果有人能提供一些指导,我们将不胜感激。我刚开始学C

printf("What is your favorite color?\n");
scanf("%s", &color);
if (strcmp(color, "blue") == 0) {
  printf("Your favorite color is %s. Me too!\n\n", color);
} else {
  printf("Your favorite color is %s. That is cool. My favorite color is blue.\n\n", color);
}
全文如下:

#include <stdio.h>
#include <string.h>

int main(void)

{
    char first [20];
    char last [20];
    char color [20];
    int n;

    printf("Please input your first name: ");
    scanf("%s", &first);
    printf("Please input your last name: ");
    scanf("%s", &last);
    printf("Your name is %s %s.\n\n", first,last);
    printf("What is your favorite color?\n");
    scanf("%s", &color);
        if (strcmp(color, "blue") == 0) {
    printf("Your favorite color is %s. Me too!\n\n", color);
        }
        else {
    printf("Your favorite color is %s. That is cool. My favorite color is blue.\n\n", color);
        }
     printf("I am thinking of a number between 1 and 100. Can you guess it?\n");
    scanf("%d", &n);
        if (n == 54) {
    printf("The number is 54! That is correct!\n\n", n);
        }
        else {
    printf("Wrong the number is not %d. The number was 54.\n\n", n);
        }
    printf("Your name is %s %s. Your favorite color is %s. You guessed the number %d.\n\n", first,last,color,n);
    return(0);
}
#包括
#包括
内部主(空)
{
字符优先[20];
最后一个字符[20];
炭色[20];
int n;
printf(“请输入您的名字:”);
scanf(“%s”,第一个(&F);
printf(“请输入您的姓氏:”);
scanf(“%s”,最后一个(&L);
printf(“您的名字是%s%s。\n\n”,第一个,最后一个);
printf(“您最喜欢的颜色是什么?\n”);
扫描频率(“%s”和颜色);
如果(strcmp(颜色,“蓝色”)==0){
printf(“您最喜欢的颜色是%s。我也是!\n\n”,颜色);
}
否则{
printf(“您最喜欢的颜色是%s。这很酷。我最喜欢的颜色是蓝色。\n\n”,color);
}
printf(“我想的是一个介于1和100之间的数字。你能猜出来吗?\n”);
scanf(“%d”和“&n”);
如果(n==54){
printf(“数字是54!正确!\n\n”,n);
}
否则{
printf(“错误,号码不是%d。号码是54。\n\n”,n);
}
printf(“您的名字是%s%s。您最喜欢的颜色是%s。您猜到了数字%d。\n\n”,第一个,最后一个,颜色,n);
返回(0);
}

直接使用
|
来接受这两个选项

if (strcmp(color, "blue") == 0 || strcmp(color, "Blue") == 0)

只需直接使用
|
即可接受这两者

if (strcmp(color, "blue") == 0 || strcmp(color, "Blue") == 0)
如您所注意到的,是区分大小写的。您可以使用逻辑或
| |
使代码与其他输入格式一起工作。例如:

if ((strcmp(color, "blue") == 0) || (strcmp(color, "Blue") == 0))
但这是相当乏味的编写和将不工作的输入“蓝色”

如果在基于Unix的系统上,则可以使用进行不区分大小写的比较。不幸的是,这个函数不是标准的。在Windows上,一个等价物是

正如您所注意到的,是区分大小写的。您可以使用逻辑或
| |
使代码与其他输入格式一起工作。例如:

if ((strcmp(color, "blue") == 0) || (strcmp(color, "Blue") == 0))
但这是相当乏味的编写和将不工作的输入“蓝色”


如果在基于Unix的系统上,则可以使用进行不区分大小写的比较。不幸的是,这个函数不是标准的。在Windows上,一个等价物是

如果您不想依赖特定于平台的标题,可以非常轻松地将整个输入字符串转换为小写:

void lower_string(char *str) {
  for (char *p = str; *p != '\0'; ++p) {
    *p = tolower(*p);
  }
}
然后

lower_string(color);
或者进行自己的不区分大小写的比较

int strcmp_insensitive(const char *str1, const char *str2) {
  for (; *str1 && *str2; ++str1, ++str2) {
    if (tolower(*str1) > tolower(*str2)) return 1;
    if (tolower(*str1) < tolower(*str2)) return -1;
  }
  if (*str1 == *str2) return 0;
  if (*str1 == '\0') return -1;
  return 1;
}
int strcmp\u不敏感(常量字符*str1,常量字符*str2){
对于(;*str1&&*str2;++str1,++str2){
如果(tolower(*str1)>tolower(*str2))返回1;
如果(tolower(*str1)

尽管出于简单目的,我建议您使用glampert的答案。

如果您不想依赖特定于平台的标题,您可以非常轻松地将整个输入字符串转换为小写:

void lower_string(char *str) {
  for (char *p = str; *p != '\0'; ++p) {
    *p = tolower(*p);
  }
}
然后

lower_string(color);
或者进行自己的不区分大小写的比较

int strcmp_insensitive(const char *str1, const char *str2) {
  for (; *str1 && *str2; ++str1, ++str2) {
    if (tolower(*str1) > tolower(*str2)) return 1;
    if (tolower(*str1) < tolower(*str2)) return -1;
  }
  if (*str1 == *str2) return 0;
  if (*str1 == '\0') return -1;
  return 1;
}
int strcmp\u不敏感(常量字符*str1,常量字符*str2){
对于(;*str1&&*str2;++str1,++str2){
如果(tolower(*str1)>tolower(*str2))返回1;
如果(tolower(*str1)

尽管出于简单的目的,我建议您使用glampert的答案。

B和B具有不同的字符值,因此它们不相等。有一种非常健壮的方法可以解决这个问题——在进行比较之前,将整个字符串转换为大写或小写。这将确保蓝色、蓝色、蓝色和蓝色是相同的值。 在我的库devlib中,我有一些用于案例更改的函数。以下是实际功能:

#include <algorithm>
#include <string>
#include <cstring>

std::string toLower(std::string line)
{
    std::string tmp = line;
    std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
    return tmp;
}

std::string toUpper(std::string line)
{
    std::string tmp = line;
    std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper);
    return tmp;
}

B和B具有不同的字符值,因此它们不相等。有一种非常健壮的方法可以解决这个问题——在进行比较之前,将整个字符串转换为大写或小写。这将确保蓝色、蓝色、蓝色和蓝色是相同的值。 在我的库devlib中,我有一些用于案例更改的函数。以下是实际功能:

#include <algorithm>
#include <string>
#include <cstring>

std::string toLower(std::string line)
{
    std::string tmp = line;
    std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
    return tmp;
}

std::string toUpper(std::string line)
{
    std::string tmp = line;
    std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::toupper);
    return tmp;
}

哇strcmp(颜色,“蓝色”)==0 | | strcmp(颜色,“蓝色”)==0@Earth科学:你已经试过什么了?它出了什么问题?您的scanf应该是
颜色
,而不是
颜色
。字符串已经存在pointers@RyanHaining非常感谢。更改了第一个、最后一个和颜色(&C)。哎呀。。。strcmp(颜色,“蓝色”)==0 | | strcmp(颜色,“蓝色”)==0@Earth科学:你已经试过什么了?它出了什么问题?您的scanf应该是
颜色
,而不是
颜色
。字符串已经存在pointers@RyanHaining非常感谢。更改了&first、&last和&color。@EarthScience,不用担心。@EarthScience,不用担心。我刚开始学习C,但我会努力学习它到底是如何工作的。@EarthScience
lower\u string
只作为字符串,循环遍历每个字符,并使用
tolower
使其小写
strcmp\u-insensitive
strcmp
的一个奇特版本,它在每次比较时调用
tolower
。我可以写一个更简单的方法,只返回它们是否相等,不做大于/小于检查,如果这对你有帮助的话。我刚开始学习C,但我会尝试确切地了解它是如何工作的。@EarthScience
lower_string
只是作为字符串,循环遍历每个字符,并使用
tolower
使其小写
strcmp\u-insensitive
strcmp
的一个奇特版本,它在每次比较时调用
tolower
。我可以编写一个更简单的函数,它只返回它们是否相等,并且不执行大于/小于检查,如果这有助于您成为POSIX标准的一部分,那么它是可移植的。是POSIX标准的一部分,因此它相当便携。谢谢您的回答!这也很有帮助。谢谢。这些都是我的功能