【问题标题】:input of character in cc中的字符输入
【发布时间】:2020-05-16 17:00:35
【问题描述】:

我正在尝试读取输入字符直到它是'a'。但是我需要输入所有字符直到 a ) 输入它在下一个循环中使用 f 以及换行符。

#include<stdio.h>
int main()
{
    char val;
    while(1)
    {
        printf("\nenter val: (a to stop)");
        scanf("%c",&val);
        printf("val is %d\n",(int)val);
        if(val=='a')
            break;
        else
            continue;
    }
    return 0;
}

输出:

enter val: (a to stop)f
val is 102

enter val: (a to stop)val is 10

enter val: (a to stop)

【问题讨论】:

  • 提示:停止使用scanf 并开始使用freadfgetc 之类的东西。
  • 不清楚你的问题是什么。换行 一个字符,所以你看到的行为肯定是预期的。你到底想要什么?
  • else continue 不需要
  • @moonshines:不,换行符始终是一个字符。通常可以配置您的输入设备,以便在按下字符后立即返回输入,而不是等待换行符,但有关如何执行此操作的详细信息取决于您的操作系统。有很多关于该主题的 SO 问题。
  • @rici 我需要输入的值,直到输入“a”,所以给 char 并按 Enter 会不必要地添加换行符,所以如何在没有换行符的情况下做到这一点。即

标签: c char scanf


【解决方案1】:

换行符是一个字符,它的值是10。如果你不想要它,打印前检查它是否是换行符。

include<stdio.h>
int main()
{
    char val;
    while(1)
    {
        printf("\nenter val: (a to stop)");
        scanf("%c%*c",&val);
        printf("val is %d\n",(int)val);
        if(val=='a')
            break;
        else
            continue;
    }
    return 0;
}

【讨论】:

  • 是的,但是它会打印一个杂散输入值;谢谢顺便说一句:)
  • scanf("%c",&dummy);在扫描 val 解决它之后添加这个,假人只是得到换行但是它看起来非常不专业。
  • 是的,但它正在打印一个杂散输入值(a 停止)
【解决方案2】:

这是实现您想要的相同逻辑的另一种方式。当您使用scanf()时,您可以在格式说明符之前添加一个空格

scanf(" %c",&val); 

前导空格告诉scanf() 在读取下一个字符之前跳过任何空白字符(包括换行符)。

正如他们中的许多人建议的那样,您可以使用fgetsfgetc

【讨论】:

    【解决方案3】:

    如果您想跳过换行符,也可以使用gets(),如下所示

    #include<stdio.h>
    int main()
    {
        char val;
        while(1)
        {
            printf("\nenter val: (a to stop)");
            gets(&val);
            printf("val is %d\n",(int)val);
            if(val=='a')
                break;
            else
                continue;
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      相关资源
      最近更新 更多