c - 读取文件然后重写它。 C 密码学程序

标签 c string file loops cryptography

这个程序让我很头疼,但我正在解决它!

我想创建一个程序,它基本上读取一个名为 message.txt 的文件,其中包含一些带有消息的文本,比方说:“你好,我是一个程序”,然后加密该消息并将其放入文件中名为 encryptMessage.txt,另外它会将用户使用的 key 保存在文件 key.txt 中。这就是我到目前为止所做的。

这部分已经完成了。我只需要做最后一件事。

文件 message.txt 有多于一行。例如:

hello I like programming
this is a test
to see if this program
can read and encrypt many lines

我希望程序读取所有这些行,然后加密它们并将它们保存在 encryptMessage.txt 中,如下所示(假设 key 是 3):

khoor L olnh surjudpplqj
wklv lv d whvw
wr vhh wklv surjudp
fdq uhdg dqg hgfu|sw pdq| olqhv

但是,我不知道如何让它发挥作用。我知道我需要使用循环和 !feof 函数或类似的函数。但我真的不知道如何实现,你有什么想法吗?非常感谢!

#include <stdio.h>
#include <ctype.h>
#define MAXSIZE 100

int main(void)
{
    FILE *message;
    FILE *encryptMessage;
    FILE *key;

    message = fopen("message.txt", "r");
    encryptMessage = fopen("encryptMessage.txt", "w");
    key = fopen("key.txt", "w");

    if  ((message == NULL) || (encryptMessage == NULL) || (key == NULL))
    {
            printf("Error reading file!!!\n");
            return 1;
    }

    int userKey;
    char sentence[MAXSIZE];
    char q[MAXSIZE];
    int i = 0;

    printf("Input the text that you want to encrypt:\n> ");
    fgets(sentence, 99, message);


   // printf("\nThe string that you wrote is:\n%s\n\n", sentence);

    printf("Input the key:\n");
    scanf("%d", &userKey);
    fprintf(key, "%d", userKey);

    //printf("\nThe key that you selected is: %d\n\n", userKey);


    for(i = 0; sentence[i] != '\0'; ++i)
    {
        if( ( isupper(sentence[i]) ) || ( islower(sentence[i]) ) )
        {
            q[i] = sentence[i] + (char)userKey;
        }
        else
        {
            q[i] = (sentence[i]);
        }
    }

    q[i] = '\0';
    printf("%s", q);
    fprintf(encryptMessage, "%s", q);

    fclose(encryptMessage);
    fclose(key);
    fclose(message);

    return 0;
}

最佳答案

以下是读取整个文件的方法:

while(fgets(sentence, MAXSIZE - 1, message)) {
    // do something with sentence
}

这里是修改后的源代码:http://pastebin.com/KxAe9KcS

关于c - 读取文件然后重写它。 C 密码学程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429421/

相关文章:

c++ - 如何确定在二进制文件中调用了哪些函数?

c - 从函数返回一个字符串

c++ - 如何在 C++ 中根据不同的值使用不同的命名空间?

string - Haskell 如何对字符串排序?

java - Java TCP文件传输仅在第一次尝试时完成

java - 在android中捕获图像时出现管道错误

c++ - 为什么指定的初始化程序没有在 g++ 中实现

C 代码在创建第一个 pthread (Linux) 后停止

c - 对所有排列求和的函数

java - java中如何使用三个线程同时读取文件?