寅字输入

问题描述 投票:0回答:1

我试图读取输入字符,直到它是'a'.然而我需要所有输入的字符直到a.问题是它也把新行作为一个字符,也就是说当我按一个字符(比如f)和回车时,它在下一个循环中把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)
c char scanf
1个回答
2
投票

这是另一种实现你想要的相同逻辑的方法.你可以在格式指定符前添加一个空格,当你使用 scanf()

scanf(" %c",&val); 

前导空格告诉 scanf() 来跳过任何空白字符(包括换行),然后再读取下一个字符。

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


1
投票

Newline是一个字符,它的值是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;
}

1
投票

你也可以使用 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;
}
© www.soinside.com 2019 - 2024. All rights reserved.