2012-04-21 47 views
0
#include <stdio.h> 

int main() 
{ 
    char _char = 32; 
    int x, p, i, d; 
    scanf("%d ", &x); 
    while(_char == 32) 
     _char = getchar(); 
    x = x%26; 
    printf("The encrypted string is: "); 
    while((_char >= 'a' && _char <= 'z') || (_char >= 'A' && _char <= 'Z')) 
    { 
     if(_char >= 'a' && _char <= 'z') 
      _char = 'a' + (_char + x - 'a')%26; 
     else 
      _char = 'A' + (_char + x - 'A')%26; 
     d = 'a' - 'A'; 
     p = (_char >= 'a') ? _char - d : _char + d; 
     printf("%c", p); 
     scanf("%c", &_char); 
    } 
    return 0; 
} 

代碼描述:程序收到一個數字'x',後面跟着空格,然後是一串字母,然後它會打印這些字母(修改)直到第一個數字或沒有更多信件接收。它工作正常,當我運行它的代碼塊,但是當我用CMD插入輸入作爲一個文件,這給了我一個無限循環,如果我插入:C中的死循環

1 FffF 

當我添加0或任意數量的正常工作:

1 FffF0 

無限循環是某事像:

加密的字符串是: BBBcccDDDeeefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz....

我怎麼能解決售後服務這個!?

+0

小提示:如果不喜歡你的'while'條件來檢查信件做這樣的比較,有一個方便的功能稱爲「isalpha」。還有一些功能可以檢查字符是低位還是大寫:「islower」和「isupper」。 – 2012-04-21 16:08:29

回答

3

如果沒有更多的輸入掃描,

scanf("%c", &_char); 

不修改_char。你必須檢查掃描的返回值,

if (scanf("%c",&_char) < 1) break; 

然後退出循環。

+0

完美thnx :) – Rawhi 2012-04-21 16:09:00

1

您不檢查返回值scanf,所以您不檢測輸入已結束。 Scanf返回匹配項的數量,在您的情況下,成功時返回1。在第一項之前到達文件結尾時,它返回-1。

所以,你應該循環breakscanf不返回1.