为什么scanf和getchar会在输入时添加换行符?

3

我正在尝试测试这个简单的查找表,但不明白为什么scanfgetchar都会将换行符('\n')添加到输入中:

const int arr[10] = {1,0,5,7,6,4,8,2,9,3};
char digit;

printf("enter digits please\n");
digit = getchar();
while ((digit>='0') && (digit<='9'))
{
    printf("%d --> %d\n",digit,arr[digit-'0']);
    digit = getchar();
}
printf("bye bye!");

运行此代码时,无论使用printf还是getchar(),while循环仅执行一次,因为换行符('\n')也存储在char变量digit中,我不知道原因。


当您在此程序中输入时,您输入了什么?您按下的键的确切顺序是什么? - zwol
当您按下Return/Enter键时,getchar()会读取一个换行符。 - Barmar
如果你想跳过那些,你需要将该逻辑添加到循环中,而不是仅仅停止循环。 - Barmar
你也可以通过在一行上输入所有数字来解决这个问题。 - Barmar
1个回答

0
当您按下Enter键时,它会将一个新行添加到输入中。如果您想跳过它,您需要跳过它。一种简单的方法是使用带有空格的格式字符串的scanf,这将跳过所有空格。使用:
scanf(" %c", &digit);

在你执行这两个操作的地方,改用digit = getchar();代替。


1
不建议使用 *scanf,它们已经被指定为有缺陷的,永远不应该使用。 - zwol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接