【问题标题】:My code dont see a whille loop in C (with a getchar function)我的代码在 C 中看不到 while 循环(带有 getchar 函数)
【发布时间】:2019-10-26 21:00:41
【问题描述】:

我的程序没有看到 while 循环,我无法将搅拌输入到 c 变量中

我想输入一个字符串。如果此字符串中的 char 将是一个数字,他将保持为数字,如果他不是数字,他将更改为 char 'num'ascii 代码中更远的位置。

#include <stdio.h>
#include <ctype.h>

int main()
{

    int num;
    char c;

    printf("Enter number: \n");
    scanf("%d", &num);

    printf("Enter a string : \n");
    while ((c = getchar()) != '\n')
    {
        if (isdigit(c))
        {
            putchar(c);
        }
        else
        {
            putchar(c + num);
        }
    }

    return 0;
}

【问题讨论】:

  • 首先,getchar 函数返回一个 int。当您与 EOF 进行比较时,这一点很重要,您总是应该这样做。其次,请学习如何使用调试器逐句执行代码,同时监控变量及其值。如果您这样做,您可能会惊讶地看到您阅读的第一个字符。或者可能不是,如果您考虑一下您可能按下以结束整数输入的Enter 键,以及它可能会添加到输入缓冲区中的字符。

标签: c while-loop getchar


【解决方案1】:

对于scanf()getchar(),您通常必须在所需键之后按[return] 键。所需的键和返回键(通常)都放在标准输入流中。问题代码忽略了这一点。因此,scanf() 读取了第一个所需的密钥并将其存储在 num 中,但将返回密钥 '\n' 留在了缓冲区中;然后由getchar() 读取并存储在c 中。因此,循环退出条件得到满足,程序终止。

不知何故,代码要正常运行,必须读取调用scanf(); 留下的不需要的返回键'\n',也许还读取getchar()

可能是这样的:

#include <stdio.h>
#include <ctype.h>

int main()
{
    int num;
    int c;
    char cr[2];
    printf("Enter number: \n");
    scanf("%d%1[\n]", &num, cr);  // Reads %d into num, and garbage '\n' into cr.
    printf("Enter a string : \n");
    while((c = getchar()) != '\n')
    {
        if(isdigit(c))
            putchar(c);
        else
            putchar(c + num);
        getchar(); // Reads garbage '\n' from previous getchar()
    }
    printf("\n");
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2021-07-18
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多