[英]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.