我怎么才让用户在c中输入一个字符

时间:2016-07-18 15:31:05

标签: c loops input fgets gets

如果我只想让用户输入一个字符,我将如何用c语言进行操作。我在这方面的尝试是在下面,但它失败了。从我在网上看到的,我听说你可以使用函数gets或fgets来完成这个,但我无法弄清楚如何。

do
{
    geussNumber += 1;
    printf("Enter guess number %d\n", geussNumber);
    scanf(" %c", &geussLetter);
    scanf ("%c", &inputViolation);
        if (isalpha(geussLetter) == 0)
        {
            printf("You did not enter a letter\n");
        }
        else if (inputViolation == true)
        {
            printf("You eneterd more than one letter\n");
        }
        else
        {
        inputLoopEnd = 1;
        }
}
while( inputLoopEnd == false );

3 个答案:

答案 0 :(得分:3)

您可以使用getc系列函数。

例如,请查看http://quiz.geeksforgeeks.org/difference-getchar-getch-getc-getche/

答案 1 :(得分:0)

似乎你想一次读取一行输入(用户键入一个字母的猜测然后<输入>),你想验证猜测确实包含只有一个字母。用这些术语来解决问题或许可以更清楚地应用fgets()的方式,因为该功能的目的是一次读取一行。读完一行 - 或至少与缓冲区可以容纳的一样 - 你可以验证它并提取猜测。

scanf()很难正确使用,因此我建议使用fgets()方法。但是,如果您坚持使用scanf(),那么您可以这样做:

// consumes leading whitespace, inputs one character, then consumes any
// immediately-following run of spaces and tabs:
int result = scanf(" %c%*[ \t]", &guessLetter);

if (result == EOF) {
    // handle end-of-file ...
} else {
    assert(result == 1);  // optional; requires assert.h

    int nextChar = getchar();

    if ((nextChar == '\n') || (nextChar == EOF)) {
        // handle multiple-character guess ...
    } else if (!isalpha(guessLetter)) {
        // handle non-alphabetic guess ...
    } else {
        // it's valid ...
    }
}

答案 2 :(得分:-1)

不要使用fgets()或fputs()之类的东西......它们不再使用了。

从描述中可以看到here ...这个函数用于处理str类型的对象,你现在更专注于使用字符,所以为什么不只处理字符来生活更容易。

你不能以你认为的方式做到这一点......

scanf(" %c", &geussLetter);
scanf ("%c", &inputViolation);

这不起作用,因为即使用户只按照预期的方式输入一个字符,它仍然会触发你的inputViolation方案。

编辑:2016年7月20日下午12:14

我非常喜欢社区维基上MOHAMAD's solution的优雅。

所以我编辑以适应你的情况,它在这里运作良好。同样的想法......

#include <stdio.h>  
#include <stdlib.h> 

int clean_stdin()
{
    while (getchar() != '\n');
    return 1;
}

int main(void)
{
    int first_time_around = 0;
    char theguess = 0;
    char c;
    do
    {
        if (first_time_around == 0)
            first_time_around++;
        else
            printf("Wrong input \n");

        printf("Enter guess number: \n");

    } while (((scanf("%c%c", &theguess, &c) != 2 || c != '\n') 
             && clean_stdin()) || !isalpha(theguess));

    return 0;
}