我写了一个功能,我遇到了问题,scanf功能无法读取空格键" ",我该如何解决?
void add()
{
char choose2;
FILE *fp;
struct booking book;
system("cls");
fp=fopen("hotelbooking.txt","a");
if(fp == NULL)
{
printf("There are no data file!");
}
else
{
printf("Add New Hotel Booking Record(s)\n");
printf(" Name of Traveller: \n");
scanf("%s",book.travellername);
fprintf(fp,"\n%s",book.travellername);
printf(" Destination: ");
scanf("%s",book.destination);
fprintf(fp,"\n%s",book.destination);
fclose(fp);
}
}
在tervellername部分,如果我想输入例如" Jason George",如何扫描姓名之间的空格键?
我使用以下结构:
struct booking
{
char travellername[20];
char destination[20];
}book;
答案 0 :(得分:3)
space
格式说明符的 C11
会在遇到空格时立即停止扫描。您无法使用它扫描s
。
引用newline
,章节§7.21.6.2,
fgets()
匹配一系列非空白字符。
要获得更好,更强大的替代方案,您可以使用fgets()
扫描整行,并以<script>
$(document).ready(function() {
alert("sd");
$('#calendar').fullCalendar({
type:"GET",
dataType: "json",
url:'${pageContext.request.contextPath}/calender_view_get_json.json',
events: [
],
});
});
</script>
结束。请记住,在这种情况下,{{1}}也会在提供的缓冲区中扫描并存储终止换行符,因此如果这很重要,您需要手动删除它。
答案 1 :(得分:0)
scanf("%[^\n]", book.travellername);
输入字符串将读取空格分隔的单词并在遇到换行符时终止(即\n
)。还要小心,这不会导致缓冲区溢出。因此,相应地定义book.travellername
的大小。
更新:我更新了格式说明符。