这是我的代码。我正在尝试编写一个文本文件所有字符(=p)。但它只写了一个字符。
FILE *enc_vigenere = fopen(".../enc_vig.txt", "w");
unsigned int i, j, p = 0;
for(i=0,j=0;i<strlen(text);i++, j++){
if(j>=strlen(key)) {
j = 0;
}
if(text[i] >= 'a' && text[i] <= 'z' ) {
p = 97+(((toupper(text[i])-65)+(toupper(key[j])-65))%26);
}
else if(text[i] >= 'A' && text[i] <= 'Z') {
p = 65+(((toupper(text[i])-65)+(toupper(key[j])-97))%26);
}
printf("%c", p);
fprintf(enc_vigenere, "%c", p);
fclose(enc_vigenere);
}
}
输出在这里:
Text you want to Encrypt : bahar
math
naahd
结果是正确的“naahd”,但是当我打开文本文件时,我只看到一个字符。 “n”我找不到如何修复它。谢谢。
最佳答案
fclose(enc_vigenere);
需要位于for
循环之外。这不是可移植的 C。您不能假设
a
到z
出现在一个 block 中。 (A
到Z
同上。)您也不能假设 65 是A
的值。
对于 (2),请使用 int islower(int c)
和 int isupper(int c)
代替。这些功能是可移植的。
关于c - 如何在C中将字符组合在一起作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40787839/