我的问题是Eclipse没有告诉我我的代码中有什么错误,而且它正在编译。但是当我运行程序时没有任何反应。我甚至没有看到第一条printf线。
好的,这是提示:
您要编写一个使用Caesar密码加密消息的程序。用户将进入 密钥的值和要加密的消息。示例运行如下所示 你的程序的输出应该完全遵循这种格式。用户输入带有下划线。
输入班次金额(1-25):
3
输入要加密的邮件:
来吧,让我的一天。
加密邮件:Jr dkhdg,pdnh pb gdb。
我的代码:
#include <stdio.h>
#include <ctype.h>
char encrypt(char ch, int k){
if (isalpha(ch)){
if (isupper(ch)) {
ch = ch + k;
if (ch > 'Z') {
ch = ch - k;
ch = ((ch - 65) + k) % 26 + 65;
}
}
else {
ch = ch + k;
if (ch > 'z'){
ch = ch - k;
ch = ((ch - 97) + k) % 26 + 97;
}
}
}
return ch;
}
void main(){
int k = 0;
char ch = 'a';
printf("Enter shift amount (1-25):\n");
scanf("%d ", &k);
printf("Enter message to be encrypted:\n");
ch = getchar();
while(ch != '\n'){
encrypt(&ch, k);
}
printf("\n");
printf("Encrypted message: ");
while(ch != EOF){
putchar(ch);
}
return 0;
}
答案 0 :(得分:0)
小写字母ch = ch + k;
可能会溢出char
。
使用%26
数学执行int
。
if (isupper(ch)) {
ch = (ch - 'A' + k)%26 + 'A';
}
else if (isupper(ch)) {
ch = (ch - 'a' + k)%26 + 'a';
else {
Report_BadInput();
}
输入搞砸了
printf("Enter shift amount (1-25):\n");
// scanf("%d ", &k); The space really messes things up.
// The space tells `scanf()` to keep on scanning until non-white-space is found.
scanf("%d", &k);
读取和打印循环混乱。
printf("Enter message to be encrypted:\n");
int ch; // Use int here
while ((ch = getchar()) != '\n') && (ch != EOF) {
if (isalpha(ch) {
ch = encrypt(ch, k);
}
putchar(ch);
}
putchar('\n');
答案 1 :(得分:0)
您的加密功能写得很糟糕。当你使用&ch
时,你是在没有强制转换的情况下从指针创建一个整数,你应该强制转换或创建一个数组来存储输入。在这种情况下,在main()
中添加返回值没有意义,因为它是void类型和程序的结束点。
#include <stdio.h>
#include <ctype.h>
void main(){
static int x = 0;
int k;
char c;
char cipher[ARRAYMAX] = {0};
printf("Enter shift amount (1-25):\n");
scanf("%d", &k);
printf("Enter message to be encrypted:\n");
scanf("%c", &c);
while((c=getchar()) != '\n') {
cipher[x++]=(char)(c+k);
}
printf("%s", cipher);
}
您可以在另一个函数中编写加密代码,并使用malloc
创建一个数组而不指定它的大小(ARRAYMAX)。