2013-10-15 173 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)最好的方式说感谢是通过投票:) –