我想创建一个程序,它接受字母并使用凯撒加密将它们从1的值转换为b。必须使用字符串才能执行此操作。
我的问题是我的程序不会将用户输入到字符串中。 (我试图把man [10]放在scanf中,但这只会导致程序崩溃 - 所以我愿意把不正确的人放在那里,以便程序可以编译)。
#include <stdio.h>
int main(){
int i=0; //setting the individual slot number for the array-- later used in the while loop
char guy[10];
printf("Enter Plain Text:");
scanf("%s",&guy); //takes user's input-- such as "abc" and puts it into its respective slot in the array guy[10] r-right?
while (guy[10] != '\0'){ //while loop that runs until it reaches the end of the string
if ((guy[i]) >= 'A' && (guy[i]<= 'Z')){ //moves capital letter values up 1
guy[i]=guy[i]++; //makes the current "slot" number go up 1 value. Example: a = 97 + 1 -> b = 98
}
if ((guy[i]) >= 'a' && (guy[i]) <= 'z'){// moves lower case letter values up 1
guy[i]=guy[i]++;
}
i++; //moves the array's interval up to the next "slot"
}
printf("Encrypted text is: %s",guy);
}
答案 0 :(得分:0)
你的第一个问题是这一行:
scanf("%s",&guy);
因为guy
是一个数组,所以我们不需要获取指向它的指针,它的名称在此上下文中被视为指针。只需:
(void) scanf("%s", guy);
你的第二个问题是这一行:
while (guy[10] != '\0')
正如WhozCraig在评论中指出的那样 - 这应该使用索引i
,而不是10
第三个问题是这个陈述没有意义:
guy[i]=guy[i]++;
合理的替代方案包括:
guy[i] = guy[i] + 1;
guy[i]++;
guy[i] += 1;
第四个问题是你没有处理环绕。例如。什么&#39; Z&#39;映射到你的代码?看起来它会像#34; [&#34;而不是&#34; A&#34;。
第五个问题是scanf()
可以溢出数组guy
,因为它的输入大小是无限的。对于guy[10]
,我们需要执行以下操作:
scanf("%9s", guy);
将输入限制为九个字符,并为最终的&#39; \ 0&#39;提供空间。在这种情况下使用fgets()
会更好,因为它更安全,我们不需要scanf()
的解析力:
fgets(guy, 10, stdin);
这是一个解决这五个问题的返工:
#include <stdio.h>
int main() {
char text[10];
printf("Enter Plain Text: ");
(void) fgets(text, 10, stdin); // takes user's input -- such as "abc" and put it into its respective slots in the array
int i = 0; // slot index for the array
while (text[i] != '\0') { // loop until reach end of string
if (text[i] >= 'A' && text[i] <= 'Z') { // move capital letter values up 1
// make the letter go up 1 modulo 26. Example: A = 65 + 1 -> B = 66; Z = 90 + 1 -> A = 65
text[i] = ((text[i] - 'A' + 1) % ('Z' - 'A' + 1)) + 'A';
} else if (text[i] >= 'a' && text[i] <= 'z') { // move lower case letter values up 1
text[i] = ((text[i] - 'a' + 1) % ('z' - 'a' + 1)) + 'a';
}
i++; // move the array's index up to the next "slot"
}
printf("Encrypted text is: %s\n", text);
}