c - C中的无限循环

标签 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....

我怎么解决这个!?

最佳答案

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

 scanf("%c", &_char);

不修改 _char。你必须检查扫描的返回值,

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

然后退出循环。

关于c - C中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10260579/

相关文章:

c - 唯一元素 - 结构数组

c - 使用 MPI 分散连续的二维数组

C# P/调用数组数组

c++ - Code::Blocks to XCode:导入带有 GUI 的 C++

c - 将零参数函数添加到 _Generic 宏

c - 已接受来自 00 :00:00:00:00:00; after connect 的连接

c++ - 从 C++ 中的函数返回数组

cvWatershed 不支持的格式或格式组合

c++ - 如何在 C++ 中执行文件搜索

c++ - jpeg-8d 库的链接(或正确安装和链接)