gpt4 book ai didi

c - 程序不打印空格和标点符号

转载 作者:行者123 更新时间:2023-11-30 21:37:13 24 4
gpt4 key购买 nike

此代码应该根据命令参数输入 key 对文本进行加密并打印出加密文本。但是它不打印空格和标点符号。有人可以解释一下出了什么问题吗?

使用示例:

$ ./caesar 12
world, say hello!
iadxp, emk tqxxa!
$

代码:

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(int argc, string argv[])
{
if (argc>2 || argc<2)
{
printf("Please enter a valid argument.\n");
return 1;
}

string input = GetString();

int key = atoi(argv[1]);

for(int i = 0, l = strlen(input); i < l; i++)
{
//if(isalpha(input[i]))
//{
char c = input[i];
int letternum = c;

if(isupper(c))
{
int upper = 'A';
int alphanum = letternum - upper;

int newint = (alphanum + key) % 26;

newint = newint + upper;

char newchar = newint;

printf("%c", newchar);
}

if(islower(c))
{
int lower = 'a';
int alphanum = letternum - lower;

int newint = (alphanum + key) % 26;

newint = newint + lower;

char newchar = newint;

printf("%c", newchar);
}
//}

}

printf("\n");
}

最佳答案

添加else之后if() block 。

更改自

       if(isupper(c)) {
...
}
if(islower(c)) {
...
}

       if(isupper(c)) {
...
} else if(islower(c)) {
...
} else {
putc(c);
}

注意:迂腐的代码将使用以下内容: is...()为所有 int 定义了函数unsigned char 范围内的值和EOF .

isupper((unsigned char) c)
islower((unsigned char) c)

注2:如果alphanum + key < 0,代码将会出现问题。可能需要添加一个测试来确保 key不太消极或使用以下内容来确保 key >= 0 .

int key = atoi(argv[1]) % 26 + 26;

注3:OP的代码假设A-Za-z是连续的,如ASCII编码(肯定是 99.99+% 的情况),但在 EBCDIC 中则不然。

关于c - 程序不打印空格和标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com