Точная проблема, с которой я столкнулся, заключается в том, что мы были назначены для создания программы, которая имела 2 аргумента командной строки, оба из которых были текстовыми файлами.Код, который у меня есть для arg [1], работает нормально, он читает текстовый файл и сохраняет его в массиве.Как только он сохраняется в массиве с именем key, он проходит цикл, который оставляет только буквенные символы и меняет прописные буквы на строчные.Еще раз, это работает нормально, когда я тестирую его и распечатываю окончательный массив с именем key.Когда я использую тот же код для arg [2], первый цикл (while (! Feof (file2))) даже не копирует содержимое другого текстового файла в массив, называемый plain.Он копирует весь контент, но добавляет ▒ в конце, когда я распечатываю обычный массив, чтобы проверить, есть ли у меня все символы там, прежде чем запускать его через цикл, который оставляет в нем только буквенные символы.Если я переключаю порядок файлов при вводе их в терминал, тогда второй файл работает нормально с кодом arg [1], но тогда другой файл не работает с кодом arg [2].Я использую mobaxterm, поэтому я ввожу его как "./a.out k1.txt p1.txt" без цитат, конечно.Я также прокомментировал код, который удаляет неальфа-символы в arg [2], просто чтобы попытаться выяснить, почему цикл while не правильно хранит содержимое файла.
Вот содержимое текстовых файлов
k1.txt (вместо пробела представьте, что он переходит на следующую строку):
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.combbbbbbbbb
p1.txt:
"Если вы обнаружите, что тратите почти все свое время на теорию, начните обращать внимание на практические вещи, это улучшит ваши теории. Если вы найдетечто вы проводите почти все свое время на практике, начните обращать внимание на теоретические вещи, это улучшит вашу практику ».- Дональд Кнут
Кстати, это назначение шифрования, а k1 - это ключ, а p1 - простой текст.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char **argv) {
printf( "\ncommandline arguments including program name:\n\n");
int i;
for ( i = 0; i < argc; i++ ) {
printf( "argument %d: %s\n", i, argv[ i ] );
}
printf( "\n");
char* fname = argv[ 1 ];
FILE *file = fopen( fname, "r" );
char key[512];
int x,y, z=0;
if ( file == 0 )
{
printf( "Could not open file\n" );
} else {
printf( "File opened successfully\n" );
while(!feof(file))
{
fscanf(file, "%c", &key[z]);
z++;
}fscanf(file, "%c", &key[z]);
for(x=0; key[x] != '\0'; x++)
{
while(!((key[x] >= 'a' && key[x] <= 'z') || (key[x] >= 'A' && key[x] <= 'Z') || key[x] == '\0'))
{
for(y=x; key[y] != '\0'; ++y)
{
key[y]=key[y+1];
}
key[y] = '\0';
}
key[x] = tolower(key[x]);
}
printf("Key text:\n%s\n", key);
fclose( file );
}
char* fname2 = argv[ 2 ];
FILE *file2 = fopen( fname2, "r" );
char plain[512];
int j,k, l=0;
if ( file2 == 0)
{
printf("Could not open file\n");
}else {
printf("File opened successfully\n");
while(!feof(file2))
{
fscanf(file2, "%c", &plain[l]);
l++;
}fscanf(file2, "%c", &plain[l]);
/* for(j=0; key[j] != '\0'; j++)
{
while(!((plain[j] >= 'a' && plain[j] <= 'z') || (plain[j] >= 'A' && plain[j] <= 'Z') || plain[j] == '\0'))
{
for(k=j; plain[k] != '\0'; ++k)
{
plain[k]=plain[k+1];
}
plain[k] = '\0';
}
plain[j] = tolower(plain[j]);
}*/
printf("Plain text:\n%s\n", plain);
fclose(file2);
}
return 0;
}