在 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'
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn