gpt4 book ai didi

c - 使用 scanf ("%d ") 在 %d 之后有一个空格

转载 作者:太空宇宙 更新时间:2023-11-04 05:23:49 26 4
gpt4 key购买 nike

今天在我的 c 课上,我遇到了 scanf() 命令的麻烦,我们只是在学习指针,我们遇到了一个问题,要求我们获取一个数组,并在不使用 [] 的情况下反转打印它,除了声明 (整数)数组。当然这看起来像小菜一碟,但当你不小心写下时就不是这样了:

scanf("%d ", arr + i);

你注意到 %d 后面的空格了吗?当然确实花了我一段时间才弄明白,但出于某种原因,循环变得疯狂,我希望你们帮助我(和我的老师)弄清楚为什么会发生这种情况。示例:

#include <stdio.h>
#define LEN 10
void arrayInput(int * arr, unsigned int len);
void arrayReverseOutput(int * arr, unsigned int len);

int main(void)
{
int arr[LEN] = { 0 };
arrayInput(arr, LEN);
arrayReverseOutput(arr, LEN);

system("pause");
return 0;
}

void arrayInput(int * arr, unsigned int len)
{
unsigned int i = 0;
printf("Enter 10 numbers: ");
for (i = 0; i < len; i++)
{
//printf("i = %d \n", i); see what happens when you use this line
scanf("%d ", arr + i);
}
}

void arrayReverseOutput(int * arr, unsigned int len)
{
int i = 0;
printf("The numbers in reverse order: ");
for (i = --len; i >= 0; i--)
{
printf("%d ", *(arr + i));
}
}

我真的很想知道那个 scanf 发生了什么......就好像它在第一次运行时需要 2 个输入但不知何故仍然设法将输入放在数组中的正确位置......感谢您花时间阅读这篇文章<3

最佳答案

格式字符串中的空格告诉 scanf() 匹配零个或多个空白字符,直到匹配失败。空格 (' ')、换行符 ('\n')、回车符 ('\r') 和制表符 ( '\t') 属于空白字符。当格式字符串末尾出现空格时,scanf() 将尝试匹配输入中的空白字符,直到找不到匹配项为止。但是,scanf() 只能在匹配失败或到达文件末尾时返回。因此,在这样的语句的情况下:

scanf("%d ", arr + i);

scanf() 的调用似乎挂起,贪婪地等待来自用户的更多输入。每当按下 Enter 键时,scanf() 将发送一个换行符并进行匹配,它仍在等待失败的匹配。或文件结尾。您可以通过在 Linux 上使用 Ctrl-D 或在 Windows 上使用 Ctrl-C 从键盘发出文件结束信号来避免此类循环。

用空格终止 scanf() 格式字符串几乎总是错误的。换行符 ('\n') 也是一个空白字符,放在格式字符串的末尾具有相同的效果。

请注意,在 scanf() 格式字符串中可以有效地使用空格。例如:

int retval = scanf(" %c %c", &c1, &c2);

在这里,如果之前的 IO 操作在输入流中留下了一个换行符(这种情况并不少见),前导空格会指示 scanf() 读取并忽略它。格式字符串中的第二个空格告诉 scanf() 期望转换输入字符之间的零个或多个空白字符。这允许用户输入带有中间空格的字符。如果没有添加空格,如果用户输入 a b\nc2 将最终保存空格字符的值,而 b 将留在输入流中以供下一个 IO 操作拾取。还要注意 scanf() 返回成功转换的次数,允许程序检查输入是否符合预期。如果上一行中的 retval 不是 2,则说明出了问题。

关于c - 使用 scanf ("%d ") 在 %d 之后有一个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43032984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com