第3个函数不会运行scanf

时间:2012-12-11 19:54:05

标签: c

我有一个简单的程序,它接收来自3个不同函数的输入,2个返回整数,1个返回一个char,但是第三个函数由于某种原因没有scanf它完全跳过该步骤。

#include <stdio.h>

int get_height();
int get_length();
char get_symbol();
void draw_rectangle(int h, int l, char s);

int main () {

    int h, l;
    char s;

    h = get_height();
    l = get_length();
    s = get_symbol();

    draw_rectangle(h, l, s);

    return 0;
}

int get_height() {

    int i;

    printf ("Please enter the height of the rectangle: ");
    scanf ("%d", &i);

    return i;
}

int get_length() {

    int i;

    printf ("Please enter the length of the rectangle: ");
    scanf ("%d", &i);

    return i;
}

char get_symbol() {

    char i;

    printf ("Please enter the symbol for the rectangle: ");
    scanf ("%c", &i);

    return i;
}

void draw_rectangle(int h, int l, char s) {
    printf ("%d %d %c", h, l, s);
}

当我运行它时,我可以扫描高度和长度,但它会打印提示以扫描char,但随后会跳过用户输入并打印h和l但不是s的值。我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

上一个scanf在输入缓冲区中留下一个换行符:

scanf ("%c", &i);

只需将其更改为:

scanf (" %c", &i);

注意空间。这将告诉scanf忽略所有空格。

答案 1 :(得分:2)

您需要使用之前scanf()次调用留下的换行符。一个简单的方法是:

scanf ("%d", &i);
getchar();

在每个使用它的函数中。或只用一个电话:

scanf(" %c", &i); 

空格将告诉它跳过之前的标签,换行符或空格。

stdin被缓冲,当用户输入数字时,您也会获得换行符。因此,获取该角色的scanf将获取其中一条留在新线上的内容

答案 2 :(得分:0)

您也可以使用

fflush(stdin);
scanf("%c",&i);

它将解决您的问题。因为fflush在读取字符之前清除缓冲区