为什么我的程序返回我没输入的字符? (纯C)

时间:2013-09-07 18:44:38

标签: c arrays char

我的节目:出了点问题

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

    }


}

2 个答案:

答案 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,然后转向? :)。必须是多语言支持错误,因为我看到你启用了西里尔语。