【发布时间】:2019-05-29 09:42:06
【问题描述】:
我有这个代码:
Hotel new_h = (Hotel*)malloc(sizeof(Hotel));
printf("\nInsert name -> ");
scanf("%[^\n]s", new_h->name);
getchar();
首先,它是如何工作的 %[^\n]s
为什么 scanf 中不只有 %s?
为什么还有getchar?
【问题讨论】:
-
本文档:sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html 将为您解释
%[^\n]s语法。 -
getchar()在这里消耗来自stdin的剩余\n -
简而言之:使用
%[^\n]s语法,您的酒店名称可以有空格。 -
我认为它也适用于
scanf("%[^\n]", new_h->name);。 -
顺便说一句:
"%[^\n]s"应该是"%[^\n]"最后不需要s。[^\n]不是%s转换的限定符。它本身就是一种转换。