在我按键退出程序之前,我的所有代码都能很好地工作,当我按下'-'时就会发生这种情况。然后我得到了那个错误,我不知道如何解决它。这是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int main() {
char rejected[2] = { 0 };
char input = 0;
char exitProgram = 0;
printf("Please enter three letters you want filteredn");
for (int x = 0; x <= 2; x++) {
scanf("%s", &rejected[x]);
}
printf("Please enter a letter and I will tell you if it is filtered or notn");
for (int y = 0; y <= 99; y++) {
scanf("%s", &input);
if (input == rejected[0] || input == rejected[1] || input == rejected[2]) {
printf("Filtered letter!n");
}
else {
printf("Okay letter!n");
}
if (y %5 == 0) {
printf("If you would like to exit this program, please enter '-'. If not, please enter '+'n");
scanf("%s", &exitProgram);
if (exitProgram == '+') {
printf("Okay, continue having fun with my program!n");
}
else if (exitProgram == '-') {
printf("Thank you for playing with my program!n");
break;
}
}
}
return 0;
}
您在三个位置使用scanf
和%s
格式说明符,后者用于读取字符串,但在每个位置都是不正确的。使用错误的格式说明符会调用未定义的行为,这可能会导致崩溃。
第一:
scanf("%s", &rejected[x]);
在这里,您确实想要读取单个字符,因此需要%c
格式说明符。这一个接受任何字符,包括空格和换行符,所以您需要在它前面加一个空格,以消耗之前读取的任何剩余换行符:
scanf(" %c", &rejected[x]);
第二:
scanf("%s", &input);
input
是char
,所以您再次需要此处的%c
:
scanf(" %c", &input);
第三:
scanf("%s", &exitProgram);
你在这里读到的是一个字符,所以像以前一样使用带前导空格的%c
:
scanf(" %c", &exitProgram);
你也有一个问题:
char rejected[2] = { 0 };
...
for (int x = 0; x <= 2; x++) {
scanf("%s", &rejected[x]);
}
数组rejected
只包含2个元素,但您尝试读入3个元素。这还通过写入超过数组末尾来调用未定义的行为。将数组的大小更改为3。
char rejected[3] = { 0 };