2013-10-15 171 views
1

我有一個關於從scanf讀取輸入的問題。從scanf讀取不同的輸入 - C語言

用戶輸入兩個命令之一。無論是單個措辭命令還是兩個措辭命令都被一個空格隔開。

例如:

開始

OR

開始計劃

我試圖從scanf函數讀取。但我有一個問題。如果我做scanf("%s", input);我假設他只會輸入一個措辭命令。

如果我這樣做scanf("%s %s", input1, input2);我假設他會輸入一個兩個措辭的命令。但是如果他輸入一個措辭命令,那麼掃描器將不斷消耗白色空間,直到讀取不同的字符。

對於兩個措辭命令我想將每個單詞存儲在一個單獨的字符串變量。

請幫忙。在格式字符串

+1

究竟是什麼,你的目標/問題?你不知道,用戶做了什麼並且想要正確地對任一選項做出反應? – icbytes

+0

請注意,您可以使用scanf(「%s」,&input),即與地址運算符一起使用。 – PhillipD

+0

@PhillipD;不確定'輸入'是指針變量還是變量。 – haccks

回答

1

除去空間,變化:

scanf("%s %s", input1, input2); 

作爲

scanf("%s%s", input1, input2); 

爲了理解這個行爲讀手冊:int scanf(const char *format, ...);

的空白字符的序列(空格,製表符,換行符等;參見 isspace(3))。該指令與輸入中的任意數量的空白空間 (包括無)匹配。

因此,由於第一個空間後%s掃描儀不斷消耗白色空間,直到不同的字符被讀取。

閱讀:"C Printf and Scanf Reference"不錯的教程。

相關問題:如果你有興趣也請閱讀"Store data in array from input"問題和答案,這將有助於你的進一步。

+0

當我讀到這個問題時,我認爲他在談論如何解析一個或兩個字符串而不知道輸入內容是什麼。 –

+0

@CharlieBurns閱讀鏈接的答案和我的參考scanf和printf ..我確定你喜歡那樣。 –

+0

這不是我正在尋找的。查理燒傷是對的,我不知道輸入是兩個單詞還是一個。 – user2817240

1

的另一種方式,讀取第一個單詞,然後有條件地讀取第二個字,

#include <stdio.h> 
#include <string.h> 
int main(void) 
{ 
    char cmd[100]; 
    char cmd1[100],cmd2[100]; 
    printf("enter command:"); fflush(stdout); 
    scanf("%s",cmd1); 
    printf("%s\n",cmd1); 
    if(strncmp(cmd1,"begin",strlen("begin"))==0) { 
     printf("read second word\n"); 
     scanf(" %s",cmd2); 
    } 
    else strcpy(cmd2,"none"); 
    printf("%s,%s\n",cmd1,cmd2); 
} 

結果,

$ ./scanf2 
enter command:start 
start 
start,none 
$ ./scanf2 
enter command:begin command 
begin 
read second word 
begin,command 
+0

謝謝,這實際上工作\ – user2817240

+0

我更喜歡fgets然後sscanf或strtok解析輸入。 – ChuckCottrill

+0

@ user2817240很好,你找到答案,現在你可能想[通過點擊右標記接受這個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作?answertab =票#tab-top)最好的方式說感謝是通過投票:) –