-2

我的程序:出了点问题

#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;
        }

    }


}
4

2 回答 2

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");

除非您想定义将指示此错误消息的变量,否则有时可能会更干净,特别是您要重用它。

希望能帮助到你。

于 2013-09-07T18:47:36.830 回答
1

您在这里使用了指针数组而不是字符数组:

 char *string[256];

您还在此处越界访问数组:

while (string[i - 1] != '*') {    // here i == -1

像这样的 scanf() 之后的 if 语句也是正确的:

if( string[i] == '*' )
    break ;

编辑:

为什么程序只打印字符??因为该cprintf("%с\n", string[i]);中的字符实际上不是一个asciic

尝试将其复制到仅支持 ascii 的程序中。我将它复制到记事本++中并将编码设置为ascii,然后它变成了?:)。一定是多语言支持错误,因为我看到您启用了西里尔字母。

于 2013-09-07T18:47:56.023 回答