2014-02-19 109 views
2

我有一段加密在凯撒密码中的文本。字符串中的空格

使用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"); 
} 

现在,任何人都可以解释我为什么空间在我的输出到哪里去了?

+2

在调试器中逐行执行程序。一旦你进入第一个空间,答案就会变得清晰。 –

+0

'continue;' - >'{putchar(s [i]);继续; }' – BLUEPIXY

+0

错误可能'printf(“%c”,s [i] - 3);' – BLUEPIXY

回答

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"); 
} 
+0

谢谢,我注意到我自己的错误已经修复了。这确实是它应该完成的方式。谢谢! – Brainscrewer