本人通信工程新生,可以指出该程序哪里出问题了吗?万分感谢!
#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中间有个空格
#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;
}
}
}
引用 皆我百晓生 小程序回复内容作答:
在这段代码中,有以下几个问题:
字符串比较应使用strcmp函数进行,而不是使用"=="运算符。因此,你需要将所有的比较语句改为strcmp函数的形式。
例如,将
arr3 == "a通信一班"
改为
strcmp(arr3, "a通信一班") == 0
你没有包含<string.h>头文件,这是使用strcmp函数所必需的。你需要在代码开头加上#include<string.h>。
在字符串的比较中,你使用了空格。这会导致你的比较失败,因为" %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 生成】
这段程序中存在以下错误:
字符串比较错误:在程序中,你使用了==
来比较字符串。然而,在C语言中,字符串的比较不能直接使用==
运算符,应该使用strcmp函数进行比较。
数组arr3长度错误:在char arr3[] = { 'a' };
这行代码中,你给arr3数组赋值了一个字符,但是没有给定数组长度。由于你在后面使用了scanf来接收用户输入的字符串,这可能会导致数组越界访问的错误。为了解决这个问题,你可以在声明时指定数组的长度,例如char arr3[50] = { 'a' };
,给定一个足够长的长度。
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;
}
}
}
这样修改后,程序将正确比较字符串内容,并在匹配到相应班级时输出对应信息。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢