首页 > 解决方案 > 文件结束命令似乎没有做任何事情?

问题描述

我是编程新手,所以我 - 正如任何人所期望的那样 - 在理解错误方面不是很有经验。

以下是我为加密用户提供的输入而编写的代码:

#include <iostream>
using namespace std;

void encrypt (char text[]) { //SHIFT CYPHER ENCRYPTION

 int i, j, l = 0;

 char *a[26], c;

 char  p[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'} ; // Encrypted character array

 char character[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; //Match character array


 for (i=0; i<26; i++) {
  a[i] = &p[i];         // Assign pointer array to char array
 }

 for (i=0; i<26; i++)
  cin >> *a[i];         // Get new values of characters

 c = '\0';
 while (c != EOF) {  //THIS IS WHERE THE PROBLEM IS

  c = getchar();
  text[l] = c;  // Reads text input from user
  l++;

  for (i=0; i<26; i++) {

    if (text[l] == character[i]) text[l] = p[i];  // Encrypts text
    else continue; }

  }

  for (j=0; j<=l; j++)
    cout << text[l];  // Prints encrypted text

}

int main() {

  char text[1000];

  encrypt (text);       // Is this the correct way to call the encrypt procedure?

  return(0);

}

当我编译并运行它时,我会从字母表中给出 26 个不同的随机字符,如下所示:

poiuytrewqasdfghjklmnbvcxz

然后输入必须由用户给出并且程序必须打印加密消息

但是,当我完成输入后,getchar()必须读取 EOF 值,对于 windows 是 Crtl-Z,对于 Unix OS 是 Ctrl-D。

我正在使用具有并行 Windows 操作系统的 mac 操作系统,并且编辑器位于 Windows 操作系统上。我都试过了Crtl-ZCtrl-D但在点击后都不起作用ENTER

例如输入是这样给出的:

what a beautiful sunny day for a walk, don't you think? <ENTER>
<CTRL-Z or CTRL-D> <ENTER>

此后程序仍在等待输入,我真的不知道为什么。

我还想知道,在int main()函数中,参数encrypt (text)是否是实际使用void过程的正确方法。

提前致谢!

PS:我知道这可能不是加密给定输入的最佳方式,但由于我是编程新手,这是我想到的第一件事,所以虽然我对更好的想法持开放态度,但我不知道我是否会完全理解他们。

标签: c++encryptioneof

解决方案


即使您没有将结果分配给任何变量,getchar仍然会读取一个字符并将其丢弃。

下次你打电话时getchar,它会读取下一个字符。

看着:

while (getchar() != EOF) {  //THIS IS WHERE THE PROBLEM IS
  text[l] = getchar(); 

输入的一半只加密,另一半只比较EOF

改成:

char c='\0';
while ((c=getchar()) != EOF) {  //THIS IS WHERE THE PROBLEM IS
  text[l] = c; 

以便比较和加密所有输入。


推荐阅读