我希望使用char
获取scanf
数组值。我用了这段代码:
// get first array
printf("first length:\n");
scanf("%d", &f_l);
printf("first number:\n");
for(i=0 ; i<=f_l ; i++) {
scanf("%c", &first[i]);
}
//start test
printf("first number is:\n");
for(i=0 ; i<=LEN ; i++) {
printf("(%c | %d)", first[i],i);
}
但是当我打印数组时,我首先找到\n
(first[0]
),而其他字符则从place[1]
开始!为什么会这样,以及如何解决它?
答案 0 :(得分:4)
这是因为'\n'
执行scanf()
时,f_l
会留在缓冲区中。
使用尾随空格,它应该可以工作
for(i=0 ; i<=f_l ; i++) {
scanf(" %c", &first[i]);
}
答案 1 :(得分:3)
在您的代码中,
scanf("%c", &first[i]);
读取并存储先前输入的换行符(\n
)字符。你需要改变
scanf("%c", &first[i]);
到
scanf(" %c", &first[i]);
^
|
以避免先前输入的新行(\n
)字符从之前的 ENTER 键按下。 %c
之前的前导空格将导致scanf()
忽略任意数量的前导空白字符(包括换行符)并读取第一个非空白字符(预期输入)
也就是说,直接使用用户提供的值来对预定义数组进行数组索引可能会有问题。至少,检查用户输入的值是否小于定义的数组大小。