我正在编写扫描字符和整数的代码,格式如下 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]);
}
答案 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()
。