关于#c语言#的问题:#define_CRT_SECURE_NO_WARNINGS#include <stdio.h>(相关搜索:通信工程)

本人通信工程新生,可以指出该程序哪里出问题了吗?万分感谢!


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    char arr3[] = { 'a' };
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf(arr2);
    
    for (;;)
    {
        scanf(" % s", arr3);
        getchar();
        if (arr3 == "a通信一班")
        {
            printf("%s\n", arr1);
            break;
        }
        else if (arr3 == "a通信工程一班")
        {
            printf("%s\n", arr1);
            break;
        }
        else if (arr3 == "a通信工程1班")
        {
            printf("%s\n", arr1);
            break;
        }
        else if (arr3 == "a通信1班")
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}

在这段代码中,有一个明显的错误,这是因为你不能直接使用 == 运算符来比较两个字符数组的内容。

在C语言中,字符数组不能用 == 运算符进行比较,因为它只能比较两个指针是否相等,而不是比较字符串的内容。要比较两个字符串的内容,你可以使用 strcmp() 函数。

所以,在你的程序中,你需要使用 strcmp() 来比较输入的字符串和预定义的字符串。

下面是修改后的代码示例:


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> // 添加这一行来包含 strcmp 函数

int main()
{
    char arr3[20]; // 适当地增加数组的大小
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf(arr2);
    
    for (;;)
    {
        scanf("%s", arr3);
        getchar();
        if (strcmp(arr3, "a通信一班") == 0) // 使用 strcmp 函数进行比较
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程一班") == 0) // 使用 strcmp 函数进行比较
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程1班") == 0) // 使用 strcmp 函数进行比较
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信1班") == 0) // 使用 strcmp 函数进行比较
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
    return 0;
}

在这个修改后的代码中,使用了 strcmp() 函数来比较输入的字符串和预定义的字符串。如果两个字符串相等,strcmp() 函数返回 0,这样就可以正确地判断用户输入的班级了。

另外,还需要注意将 arr3 数组的大小适当增加,以确保足够容纳输入的字符串。

用strcmp比较字符串
scanf中间有个空格

img

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

int main()
{
    char arr3[] = { 'a' };
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf("%s", arr2);

    for (;;)
    {
        scanf("%s", arr3);
        getchar();
        if (strcmp(arr3, "a通信一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}

引用 皆我百晓生 小程序回复内容作答:
在这段代码中,有以下几个问题:

  1. 字符串比较应使用strcmp函数进行,而不是使用"=="运算符。因此,你需要将所有的比较语句改为strcmp函数的形式。
    例如,将
    arr3 == "a通信一班"
    改为
    strcmp(arr3, "a通信一班") == 0

  2. 你没有包含<string.h>头文件,这是使用strcmp函数所必需的。你需要在代码开头加上#include<string.h>。

  3. 在字符串的比较中,你使用了空格。这会导致你的比较失败,因为" %s"不会匹配以空格开头的字符串。你需要将scanf语句改为"%s",不带空格。

修改后的代码如下:

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

int main()
{
    char arr3[] = { 'a' };
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf(arr2);

    for (;;)
    {
        scanf("%s", arr3);
        getchar();
        if (strcmp(arr3, "a通信一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}


希望以上解答对你有帮助。如有其他问题,请随时提问。

【以下回答由 GPT 生成】

这段程序中存在以下错误:

  1. 字符串比较错误:在程序中,你使用了==来比较字符串。然而,在C语言中,字符串的比较不能直接使用==运算符,应该使用strcmp函数进行比较。

  2. 数组arr3长度错误:在char arr3[] = { 'a' };这行代码中,你给arr3数组赋值了一个字符,但是没有给定数组长度。由于你在后面使用了scanf来接收用户输入的字符串,这可能会导致数组越界访问的错误。为了解决这个问题,你可以在声明时指定数组的长度,例如char arr3[50] = { 'a' };,给定一个足够长的长度。

  3. scanf函数调用错误:在第13行的scanf(" %s", arr3);语句中,你使用了%s格式来读取输入并将其存储到arr3数组中。但是你没有为scanf提供足够的空间来存储输入的字符串,这可能导致缓冲区溢出。为了解决这个问题,你可以使用限定长度的%s格式,例如scanf(" %49s", arr3);,确保输入不会超出数组的大小。

下面是修正后的代码:

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

int main()
{
    char arr3[50] = { 'a' };
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf("%s\n", arr2);

    for (;;)
    {
        scanf(" %49s", arr3);
        getchar();

        if (strcmp(arr3, "a通信一班") == 0 || strcmp(arr3, "a通信工程一班") == 0 ||
            strcmp(arr3, "a通信工程1班") == 0 || strcmp(arr3, "a通信1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}

这样修正后的代码将避免以上所述的错误,并正确执行可能的字符串比较和数组操作。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
    char arr3[] = { 'a' };
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf("%s", arr2);
    for (;;)
    {
        scanf("%s", arr3);
        getchar();
        if (strcmp(arr3, "a通信一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程一班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信工程1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else if (strcmp(arr3, "a通信1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}


define_CRT_SECURE_NO_WARNINGS在工程中设置更好。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
该程序中存在一个问题:
在比较字符串时,应该使用strcmp()函数而不是直接使用==运算符。因为==运算符用于比较指针是否相等,而不是比较字符串的内容是否相等。

以下是修改后的代码:

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

int main()
{
    char arr3[20];
    char arr1[] = "你真好看!";
    char arr2[] = "请输入你的班级:";
    printf(arr2);
    
    for (;;)
    {
        scanf("%s", arr3);
        getchar();
        if (strcmp(arr3, "a通信一班") == 0 || strcmp(arr3, "a通信工程一班") == 0 || strcmp(arr3, "a通信工程1班") == 0 || strcmp(arr3, "a通信1班") == 0)
        {
            printf("%s\n", arr1);
            break;
        }
        else
        {
            continue;
        }
    }
}

这样修改后,程序将正确比较字符串内容,并在匹配到相应班级时输出对应信息。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢