在 C 語言中獲取使用者輸入

Jinku Hu 2023年10月12日
  1. 在 C 語言中使用 scanf 函式根據給定的格式獲取使用者輸入
  2. 使用 scanf 根據給定的格式解析使用者輸入
在 C 語言中獲取使用者輸入

本文將演示如何在 C 語言中獲取使用者輸入的多種方法。

在 C 語言中使用 scanf 函式根據給定的格式獲取使用者輸入

scanf 函式將使用者輸入的內容作為格式化文字進行處理,並將轉換後的字串值儲存在給定指標中。該函式的原型與 printf 系列函式類似。它把格式化字串引數作為如何處理輸入字元的指令,然後用一個可變數量的指標引數來儲存相應的值。

需要注意的是,%[^\n] 指定符指示 scanf 將第一個換行符之前的每個字元作為一個字串處理,並將其儲存到 char*緩衝區。目標緩衝區應該足夠大,可以容納使用者輸入的字串。另外,在字串轉換指定符中可以使用一個可選的字元 m,它將強制函式分配一個足夠大的緩衝區來儲存輸入字串。因此,使用者需要在給定的指標不再需要後呼叫 free 函式。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char str1[1000];

  printf("Input the text: ");
  scanf("%[^\n]", str1);  // takes everything before '\n'

  printf("'%s'\n", str1);
  exit(EXIT_SUCCESS);
}

輸出:

Input the text: temp string to be processed
'temp string to be processed'

或者,我們可以利用 scanf 通過修改格式字串指定符來處理給定字元之前的任何文字輸入。下面的例子顯示了 scanf 呼叫,它掃描使用者輸入,直到找到值 9 的第一個字元。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char str1[1000];

  printf("Input the text: ");
  scanf(" %[^9]*", str1);  // takes everything before '9' in string

  printf("'%s'\n", str1);
  exit(EXIT_SUCCESS);
}

輸出:

Input the text: temporary string 32j2 923mlk
'temporary string 32j2 '

使用 scanf 根據給定的格式解析使用者輸入

scanf 函式的另一個有用的功能是根據給定的格式來解析使用者輸入。*字元在格式字串中使用,通過跟隨轉換指定符丟棄匹配的字元。下一個程式碼示例演示了當 scanf 解析由強制性:符號組成的文字輸入時,只將給定符號之後的字元儲存到行末。這個選項可能對掃描固定格式的文字很有用,因為在這些文字中,某些字元出現在定界符的位置。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char str1[1000];

  printf("Input the text: ");
  scanf("%*[^:]%*c%[^\n]", str1);

  printf("'%s'\n", str1);
  exit(EXIT_SUCCESS);
}

輸出:

Input the text: temporary value of var3: 324 gel
' 324 gel'
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C IO