簡體   English   中英

為什么 scanf 不能在正式輸入結束時使用空格?

[英]Why scanf doesn't work with spaces at the end of formal input?

我正在嘗試這個:

    int M,N,K;
    printf("Enter (m,k,n) : ");
    scanf("%d %d %d ", &M, &K, &N);
    printf("\nDone?");

這是主function內部。 我需要程序來讀取三個整數,但是當我運行它時,它只讀取三個但 go 沒有通過 scanf,即“完成?” 沒有被執行,就好像它還在等待更多的輸入。 如果我在最后一個 %d 之后刪除空間,它工作正常。 但為什么會這樣呢?

如果我在最后一個 %d 之后刪除空間,它工作正常。 但為什么會這樣呢?

" " in "%d %d %d "指示scanf()讀取而不是保存任意數量的空格,包括'\n'

scanf()不斷消耗空白,直到遇到一些非空白。 @user3121023

"%d %d %d "強制scanf()在 3 個數字之后讀取一些非空白之前不返回。


提示:避免scanf() 使用fgets()然后解析字符串 @DevSolar

以下是在多個變量中獲取用戶輸入的方法:

int M,N,K;
printf("Enter (m,k,n) : ");
scanf("%d", &M);
scanf("%d", &N);
scanf("%d", &K);
printf("\nDone?");

嘗試分別讀取這些值。 我不認為 scanf 打算以這種方式使用。 另外,您期望在 scanf 字符串的末尾放置一個空格是什么? 嘗試這個:

scanf("%d", &M);
scanf("%d", &K);
scanf("%d", &N);

編輯:我檢查了,是的,你可以這樣做。 但是你為什么要這樣做呢? 如果用戶輸入不正確,例如空格或非預期字符,將更難驗證。 如果您希望所有內容都在單個文本行中,則可以使用fgets()將其讀取為完整字符串並使用strtok()對其進行標記。 或者只是如圖所示單獨讀取值。

好吧,只是我的意見,壽。 如果我錯了,請有人澄清我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM