如何在c中一起扫描字符和整数

时间:2015-10-24 15:38:18

标签: c scanf

我正在编写扫描字符和整数的代码,格式如下 R 2

但是下面的代码给出了意想不到的结果,我无法扫描字符和整数来收集

int main()
{
long int m,i;
scanf("%ld",&m);
char que[m];
long int d[m];
for (i=0; i<m; i++) {
    scanf("%c ",&que[i]);
    scanf("%ld",&d[i]);
}
for (i=0; i<m; i++) {
    printf("%c  %ld",que[i],d[i]);
}

2 个答案:

答案 0 :(得分:1)

您必须在%c中的scanf()之前添加空格,以展开左侧换行\n字符。

更改后,代码工作正常,请查看以下内容。

#include<stdio.h>

int main()
{
    long int m,i;
    scanf("%ld",&m);
    char que[m];
    long int d[m];
    for (i=0; i<m; i++) {
        scanf(" %c",&que[i]);
        scanf("%ld",&d[i]);
    }
    for (i=0; i<m; i++) {
        printf("%c  %ld\n",que[i],d[i]);
    }
}

答案 1 :(得分:0)

首先,如果您创建这样的数组:

char que[m];

你将创建一个char的静态数组,需要给出你想要数组大小的精确值(也不能改变/恒定),这样你就可以了。 t put&#39; m&#39;那里。同样如此:

long int d[m];

其次,如果你使用C,你在程序中使用函数后就无法声明变量的数据类型(在你的情况下,你在声明后声明了char数组和long int数组) scanf())。

第三,如果按'输入&#39;输入后,输入将由第1行(i = 0)读取,并将\n放入第2行(i = 1),因为\n仍然在缓冲区(在scanf()情况下,stdin)。如果您使用scanf(),则会发生错误之一。至少有两种解决方案:

1.在每fflush(stdin)之后输出scanf()(不推荐,因为fflush()应该与输出流一起使用,而不是输入流)

2.创建一个这样的函数:

void clear(void) {
    while (getchar() != '\n');
    return;
}

并在每clear()之后使用scanf()

相关问题