C中的无限循环

时间:2012-04-21 15:57:32

标签: c codeblocks

#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将输入作为文件插入时,如果我插入,这会给我一个无限循环:

1   FffF 

当我添加0或任何数字时,它可以正常工作:

1   FffF0

无限循环就像:

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

我该如何解决这个问题??

2 个答案:

答案 0 :(得分:3)

如果没有更多要扫描的输入,

 scanf("%c", &_char);

不会修改_char。您必须检查扫描的返回值

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

然后退出循环。

答案 1 :(得分:1)

您不检查scanf的返回值,因此您不会检测到输入已结束。 Scanf返回匹配项的数量,成功时为1。当在第一个项目之前到达文件结尾时,它返回-1。

所以当break没有返回1时你应该scanf循环。