c++ - 文件结束命令似乎没有做任何事情?
问题描述
我是编程新手,所以我 - 正如任何人所期望的那样 - 在理解错误方面不是很有经验。
以下是我为加密用户提供的输入而编写的代码:
#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-Z
,Ctrl-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:我知道这可能不是加密给定输入的最佳方式,但由于我是编程新手,这是我想到的第一件事,所以虽然我对更好的想法持开放态度,但我不知道我是否会完全理解他们。
解决方案
即使您没有将结果分配给任何变量,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;
以便比较和加密所有输入。
推荐阅读
- javascript - 我想在新的请求到来时取消我之前的请求
- python - 如何仅更改第一个“列名”熊猫的字体
- javascript - 如何从显示为空的 javascript 对象中读取?
- flutter - 用于移动和网络应用程序的颤振 1.9 yaml 文件?
- python - 这是一种在python中获取窗口大小的方法
- git - 您可以使用 Git 将代码部署到设备组吗
- cuda - 将 cudaMalloc 数据清零的好方法是什么?
- react-native - 使用 Express 通过 Cloud Functions 进行 Firebase 身份验证
- javascript - 使用 JavaScript 和/或 TinySort 按子元素的标准对父元素进行排序
- css - 具有明确定义的尺寸的 div 是用视口宽度缩放尺寸吗?