如何在循环中使用 scanf 来获取 c 中的 char* 数组
How to use scanf in a loop to get a char* array in c
我想使用 scanf
获取 char
数组值。我使用了这段代码:
// 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);
}
但是当我打印数组时,我在第一个位置(first[0]
)找到了一个\n
,而其他字符却从place[1]
开始!为什么会这样,如何解决?
在您的代码中,
scanf("%c", &first[i]);
读取并存储先前输入的换行符 (\n
)。你需要改变
scanf("%c", &first[i]);
至
scanf(" %c", &first[i]);
^
|
以避免先前输入的换行符 (\n
) 由先前的 ENTER 按键生成。 %c
之前的前导 space 将导致 scanf()
忽略 任意数量的前导白色 space 字符(包括换行符)并读取第一个非白色 space 字符(预期输入)。
也就是说,直接使用用户提供的值对预定义数组进行数组索引可能会出现问题。至少,检查用户输入的值是否小于定义的数组大小。
这是因为当您为 f_l
执行 scanf()
时,缓冲区中留下了 '\n'
。
使用尾随 space,它应该有效
for(i=0 ; i<=f_l ; i++) {
scanf(" %c", &first[i]);
}
我想使用 scanf
获取 char
数组值。我使用了这段代码:
// 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);
}
但是当我打印数组时,我在第一个位置(first[0]
)找到了一个\n
,而其他字符却从place[1]
开始!为什么会这样,如何解决?
在您的代码中,
scanf("%c", &first[i]);
读取并存储先前输入的换行符 (\n
)。你需要改变
scanf("%c", &first[i]);
至
scanf(" %c", &first[i]);
^
|
以避免先前输入的换行符 (\n
) 由先前的 ENTER 按键生成。 %c
之前的前导 space 将导致 scanf()
忽略 任意数量的前导白色 space 字符(包括换行符)并读取第一个非白色 space 字符(预期输入)。
也就是说,直接使用用户提供的值对预定义数组进行数组索引可能会出现问题。至少,检查用户输入的值是否小于定义的数组大小。
这是因为当您为 f_l
执行 scanf()
时,缓冲区中留下了 '\n'
。
使用尾随 space,它应该有效
for(i=0 ; i<=f_l ; i++) {
scanf(" %c", &first[i]);
}