【问题标题】:fgets function doesn't workfgets 功能不起作用
【发布时间】:2016-09-13 10:31:52
【问题描述】:

当我编写以下代码时。腻子打印文本,但我无法在下面输入任何内容..

例如:

首先他做了一个printf --> 你是谁?

然后我做一个fgets,我通常会在其中输入一些东西,但这不起作用。

最后他又做了一个printf,他说;很高兴认识你...

 int main(void)
{       
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */

  char name[10];
  printf("Who are you? \n");
  fgets(name,10,stdin);
  printf("Good to meet you, %s.\n",name);
  return(0);  
}

谁能帮助我? 谢谢 !

【问题讨论】:

  • 你使用的是fgets(而不是标题所暗示的fgetc
  • 在这个fgets之前还有其他输入语句吗?
  • 什么平台,哪个编译器,哪个标准库?
  • 我使用程序keil vision,我使用libary stdio.h。不,我在fgets之前没有其他输入语句
  • 您似乎正试图在某种微控制器上运行程序。如果不知道它是什么以及您使用的是什么编程环境,就不可能知道发生了什么,如果您找到针对您的特定微控制器和编程环境的支持论坛,您的机会就会大得多。

标签: c printf microcontroller fgets scanf


【解决方案1】:

您已在源代码中覆盖了fputs 的实现。因此,您的链接器不需要查找该函数的库实现。通过您的 fputc 实现,您已将 stdio-output-path 连接到您的 UART 发送器。

您需要定义相应的输入路径。这可以通过实现 fgetc 函数来完成。库函数fgets可以调用你的函数,轮询UART接收器。

嵌入式环境中标准输入输出的默认实现高度依赖于供应商。它可以连接到

  • JTAG 调试器
  • 微控制器特定的调试/控制台端口
  • 什么都没有。

因此,您有责任正确实施该连接。这可能比 fputc 实现更复杂,因为您必须检查调用时 UART 是否接收到数据。

【讨论】:

  • 我现在不明白你的意思.. 我的代码中必须有什么机会?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2021-08-27
  • 2013-01-31
  • 2013-01-17
  • 2020-09-04
相关资源
最近更新 更多