Цикл по массиву не работает - PullRequest
0 голосов
/ 23 января 2019

Эта программа должна проходить через файл, и когда символ соответствует одному из заданных шаблонов, присваивает 0 или 1 его ячейке массива. А позже отобразить скрытое сообщение от пробелов и звезд. Но он присваивает 0 или 1 всем ячейкам в массиве на основе последнего символа в файле.

ПРИМЕР ФАЙЛА ДЛЯ ПЕРЕДАЧИ ПОСЛЕ (30A.dat): ZuVbJJgFyMuVaXsRkgPuHJmNgiNPFJmHDVRFmPcNLgDykaFugooidgyBhgNEsVdXCcsaYyaYQEGsNhpIxOJHyFjluiNvoFJLSTRVlEPPHGNowGeavuRnNySivmuQXXLgxDKRXPutaBOgNYiZvtPwoYHXEFcrVVOJwirHoOwmxDqFILoHfygqNcBfXLsDMXtNymytqEgCeoMoIosuctXbsmDUsmfBwzJqBMyTHjaunrlTWjzxMuBhvUGIxRAqcrFheCGUzlhLKeLHAcsvaZCaNyzuwiMgkVBbLzBHPUiXlXDXTIwjqTHvIeWFTXLdDYccceSQBfIXDagvZPesYQdjeeUVZVqdyxPcFwxaWJywgWXviFkyKoz

int tab_a[a][c];

int i = 0;
int j = 0;

while((znak = fgetc(plik2)) != EOF){
    for(int i = 0; i < a; i++){
        for(int j = 0; j < c; j++){
            if((znak == 'a') || 
                 (znak == 'B') || 
                 (znak == 'c') || 
                 (znak == 'D') || 
                 (znak == 'e') || 
                 (znak == 'F') || 
                 (znak == 'g') || 
                 (znak == 'H') || 
                 (znak == 'i') || 
                 (znak == 'J') || 
                 (znak == 'k') || 
                 (znak == 'L') || 
                 (znak == 'm') || 
                 (znak == 'N') || 
                 (znak == 'o') || 
                 (znak == 'P') || 
                 (znak == 'q') || 
                 (znak == 'R') || 
                 (znak == 's') || 
                 (znak == 'T') || 
                 (znak == 'u') || 
                 (znak == 'V') || 
                 (znak == 'w') || 
                 (znak == 'X') || 
                 (znak == 'y') || 
                 (znak == 'Z'))
                {
                    tab_a[i][j] = 0;
                }
            else if((znak == 'A') || 
                        (znak == 'b') || 
                            (znak == 'C') || 
                            (znak == 'd') || 
                            (znak == 'E') || 
                            (znak == 'f') || 
                            (znak == 'G') || 
                            (znak == 'h') || 
                            (znak == 'I') || 
                            (znak == 'j') || 
                            (znak == 'K') || 
                            (znak == 'l') || 
                            (znak == 'M') || 
                            (znak == 'n') || 
                            (znak == 'O') || 
                            (znak == 'p') || 
                            (znak == 'Q') || 
                            (znak == 'r') || 
                            (znak == 'S') || 
                            (znak == 't') || 
                            (znak == 'U') || 
                            (znak == 'v') || 
                            (znak == 'W') || 
                            (znak == 'x') || 
                            (znak == 'Y') || 
                            (znak == 'z'))
                {
                    tab_a[i][j] = 1;
                }
            }
        }
    }
for(int i = 0; i < a; i++){
    for(int j = 0; j < c; j++){
        if(tab_a[i][j] == 1){
            printf("*");
        }
        else{
            printf(" ");
        }
     }
     printf("\n");
}

fclose(plik);

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Примерно так может работать.
Создать массив допустимых символов.
Считать символ из файла в znak.
strchr проверит, является ли znak одним издопустимые символы.
Если это так, установите ноль.Если нет, установите единицу.
Приращение j.Если j равно c, сбросить j в ноль и увеличить i.
Считать другой символ.
Когда i равно a, массив заполнен.Break вне цикла.

char valid[] = "aBcDeFgHiJkLmNoPqRsTuVwXyZ";
while ( (znak = fgetc(plik2)) != EOF) {
    if ( strchr ( valid, znak)) {
        tab_a[i][j] = 0;
    }
    else {
        tab_a[i][j] = 1;
    }
    j++;
    if ( j >= c) {
        j = 0;
        i++;
        if ( i >= a) {
            break;
        }
    }
}
0 голосов
/ 23 января 2019

Да, конечно, это так:

Для каждое чтение символов, повторение по всем элементам массиваи для каждой проверки, находится ли прочитанный символ в a-zA-Z.Если так, (и это всегда будет верно), тогда установите элемент массива в 0 или 1 согласно вашим операторам if.В действительности все значения массива будут основаны на последнем прочитанном символе.

Теперь, что вы действительно хотите, неясно, поэтому я не могу дать полное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...