我的节目:出了点问题
#define _CRT_SECURE_NO_WARNINGS
#include <ctype.h>
#include <stdio.h>
//Функция для проверки соответствия символов.
int ifSignsCorrect(char theChar) {
if ((theChar >= 'A' && theChar <= 'Z') || (theChar >= 'a' && theChar <= 'z') || theChar == '.' || theChar == ' ' || theChar == '*') return 1;
return 0;
}
int main() {
char string[256];
int i = 0;
//Заполняем массив
for (i = 0; i < 256; i++) {
scanf("%c\n", &string[i]);
if (string[i] == '*') break;
printf("%с\n", string[i]);
if (ifSignsCorrect(string[i]) != 1) {
printf("You used wrong characer, formating disc C (Just joking)\n");
return;
}
}
}
答案 0 :(得分:1)
我想提到三件事:
首先:
您正尝试使用以下代码访问无效的内存:
int i = 0; while (string[i - 1] != '*') {
在第一次迭代中,您将访问string[-1]
。你必须先解决这个问题。
<强>第二强>
您正在此行中定义一个指针数组:
char *string[256];
使用字符数组char string[256];
代替。
<强>第三强>
您可以像这样打印:
printf("You used wrong characer, formating disc C (Just joking)\n");
除非您想要定义指示此error_message的变量,否则有时可能会更干净,特别是您要重用它。
希望它有所帮助。
答案 1 :(得分:1)
你在这里使用了一个指针数组而不是字符数组:
char *string[256];
你也在这里访问数组:
while (string[i - 1] != '*') { // here i == -1
这样的scanf()之后的if语句也是正确的:
if( string[i] == '*' )
break ;
编辑:
为什么程序只打印字符?
?
因为行c
中的字符printf("%с\n", string[i]);
实际上不是ascii c
尝试将其复制到仅支持ascii的程序中。我将其复制到notepad ++并将编码设置为ascii,然后转向?
:)。必须是多语言支持错误,因为我看到你启用了西里尔语。