循环输入数据

时间:2014-01-05 10:57:36

标签: c++ c

我想按格式“%d:%c”

输入数据

我有这个:

#include <stdio.h>

int main() {
    int number;
    char letter;
    int i;

    for(i = 0; i < 3; i ++) {
        scanf("%c:%d", &letter, &number);
        printf("%c:%d\n", letter, number);
    }
}

我希望如此:

Input: "a:1"
Output: "a:1"
Input: "b:2"
Output: "b:2"
Input: "c:3"
Output: "c:3"

但是我的程序做了这样的事情:

a:1
a:1
b:2

:1
b:2

--------------------------------
Process exited with return value 0
Press any key to continue . . .

这里有什么问题?

3 个答案:

答案 0 :(得分:6)

这是因为当您使用scanf读取输入时, Enter 字符仍留在缓冲区中,因此您对scanf的下一次调用会将其读作字符

这可以通过告诉scanf跳过空格,通过在格式代码中添加单个空格来轻松解决,例如

scanf(" %c:%d", &letter, &number);
/*     ^                */
/*     |                */
/* Notice leading space */

答案 1 :(得分:0)

link可能会有所帮助。在scanf()函数中使用%c之后的%c会导致你遇到这样的困难。

简而言之,在给出第一个测试用例的数字输入后输入的'\ n'将作为第二个测试用例的字符输入。

以避免您将scanf语句编辑为scanf(" %c:%d",...);。 %c之前的前导空格避免将所有这些'\ n'输入作为字符。

答案 2 :(得分:0)

OP说“...按格式输入数据”%d:%c“,但代码使用"%c:%d",数据输入暗示”char“,然后是”number“。

建议:

1)确定所需的顺序。

2)在"%c"之前使用" %c"之前的空格来使用前一行 Enter (或'\n')之类的前导空格。