如何使用scanf输入空格键作为输入?

时间:2017-03-08 06:43:33

标签: c scanf

我写了一个功能,我遇到了问题,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;

2 个答案:

答案 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)

Try this

scanf("%[^\n]", book.travellername);

输入字符串将读取空格分隔的单词并在遇到换行符时终止(即\n)。还要小心,这不会导致缓冲区溢出。因此,相应地定义book.travellername的大小。

更新:我更新了格式说明符。