Чтение строк из окна проклятий в отдельные строки - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь прочитать файл с некоторым зашифрованным содержимым ... шифрование состоит в том, что каждый символ, кроме '\ n' и "-", вычитал из него 4, а затем хорировал с 150 ... После прочтения зашифрованных символов из файла я помещаю их в строку и выполняю некоторую обработку (редактирование) с помощью библиотеки curses. Затем я снова шифрую строку и помещаю их обратно в файл. Но шифрование не работает.

Я поместил все содержимое расшифрованного файла в строку. Затем разбил строку на части на основе символов \ n и сохранил их в отдельных строковых массивах (2d), которые представляют последовательные строки в окне curses. Затем попыталсяреализовать некоторую систему управления курсором для редактирования строк и сохранения вновь отредактированных строк в массивах строк (2d). Затем я помещаю их обратно во временный файл. После этого я попытался зашифровать символы и, наконец, поместить их в исходный файл.

#include<stdio.h>
#include<curses.h>
#include<string.h>
#include<stdlib.h>

int main()
{
    FILE *fp1;
if((fp1=fopen("demo.txt","rb"))==NULL)
{
    printf("\n\n\t\t\t\t     Could not open file! Press any key to return\n");
    _getch();
    return;
}
fclose(fp1);
int xrow,xcol,row,col,i=0,j,k=0,L=0,ch1,x;
char a[1405],ab[100][1405],c;
fp1=fopen("demo.txt" , "rb")
while(1)
{
    c=fgetc(fp1);
    a[i]=c;
    i++;
    if(feof(fp1))
        break;
}
fclose(fp1);
a[i]='\0';
i=0;
initscr();
getmaxyx(stdscr,xrow,xcol);
for(j=0;j<=strlen(a);j++,k++)
{
    if(a[j]=='\n')
    {
        ab[i][k]='\0';
        k=-1;
        i++;
        continue;
    }
    ab[i][k]=a[j];
}
cbreak();
keypad(stdscr,TRUE);
for(k=0;k<=i;k++)
{
    mvaddnstr(k,0,ab[k],-1);
    refresh();
}
echo();
l=0;
while(1)
{
    noecho();
    ch1=getch();
    getyx(stdscr,row,col);
    switch(ch1)
    {
    case KEY_LEFT:
        refresh();
        if((col-1)<0)
        {
            beep();
        }
        else
        {
            col--;
        }
        wmove(stdscr,row,col);
        refresh();
        break;

    case KEY_RIGHT:
        if((col+1)>119)
        {
            beep();
        }
        else
        {
            col++;
        }
        wmove(stdscr,row,col);
        refresh();
        break;

    case KEY_UP:
        if((row-1)<0)
        {
            beep();
        }
        else
        {
            row--;
        }
        wmove(stdscr,row,col);
        refresh();
        break;

    case KEY_DOWN:
        if((row+1)>29)
        {
            beep();
        }
        else
        {
            row++;
        }
        wmove(stdscr,row,col);
        refresh();
        break;

    case 8:
        delch();
        refresh();
        break;


    case 10:
        for(k=0;k<=i;k++)
        {
            x=strlen(ab[k]);
            mvinnstr(k,0,ab[k],x);
        }
        L=1;
        break;

    default:
        addch(ch1);
        refresh();
        break;
    }
    if(l!=0)
    {
        break;
    }
}
clear();
refresh();
endwin();
system("cls");
for(k=0;k<=i;k++)
{
    printf("%s\n",ab[k]);
}
getch();
k=0;
L=0;
if((fp1=fopen("demo.txt","wb+"))!=NULL)
{
    while(1)
    {
        if(k>i)
        {
            break;
        }
        if(ab[k][l]=='\0')
        {
            c='\n';
            l=0;
            k++;
            fputc(c,fp1);
        }
        else
        {
            c=ab[k][l];
            l++;
            fputc(c,fp1);
        }
    }
}
fclose(fp1);
}

при печати линейных массивов в окне curses, я получаю странный вывод .... любая помощь будет отличнойя признателен! это часть моего проекта, и я на самом деле пытаюсь реализовать псевдотекстовый редактор, такой как функция>. <</p>

Edit: похоже, что проблема возникает после цикла while, содержащего переключательоператор выполняется. Для циклической печати строковые массивы печатают странные символы после этого. Также удалена вся работа по шифрованию-дешифрованию.

...