我有一个在Caesar的密码中加密的文本。
使用fgets
我将所有文本存储在缓冲区中。直到这里,数据才是原始形式,文本之间有空格。
现在,当我循环浏览文本并移动字母时,我的输出已删除了所有空格,而我没有更改任何文本。
这是我的代码:
int main(){
char *buff;
FILE *filePtr = fopen("text.txt", "r");
fgets(buff, BUFF, filePtr);
decrypt(buff);
}
void decrypt(char *s){
int i, a, l;
a = 3;
l = strlen(s);
for (i = 0; i < l; i++){
if (!isalpha(s[i]))
continue;
printf("%c", s[i] - 3);
}
printf("\n");
}
现在有人可以解释为什么我的输出中的空格消失了吗?
答案 0 :(得分:1)
我实际上并没有运行代码所以这主要来自我的头脑,但我最好的猜测我会说空间可能没有通过isalpha检查所以被跳过,你需要添加第二个检查对于不是要转移但仍应打印的字母的字符。例如:
int main(){
char *buff;
FILE *filePtr = fopen("text.txt", "r");
fgets(buff, BUFF, filePtr);
decrypt(buff);
}
void decrypt(char *s){
int i, a, l;
a = 3;
l = strlen(s);
for (i = 0; i < l; i++){
if (isalpha(s[i]))
printf("%c", s[i] - 3);
else if (isprint(s[i]))
printf("%c", s[i]);
}
printf("\n");
}