1

我有一个关于从 scanf 读取输入的问题。

用户输入两个命令之一。可以是单字命令,也可以是由一个空格分隔的双字命令。

例如:

开始

或者

开始程序

我正在尝试从 scanf 中读取。但我有一个问题。如果我这样做scanf("%s", input);,我假设他只会输入一个措辞的命令。

如果我这样做scanf("%s %s", input1, input2);,我假设他将输入一个两字命令。但是如果他输入一个单字命令,那么扫描器将不断地消耗空白,直到读取到不同的字符。

对于两个词的命令,我想将每个单词存储在一个单独的字符串变量中。

请帮忙。

4

2 回答 2

1

删除格式字符串中的空格,更改:

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

作为

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

要了解此行为,请阅读手册int scanf(const char *format, ...);::

一系列空白字符(空格、制表符、换行符等;请参阅 isspace(3))。该指令 匹配输入中任意数量的空白,包括无空白

因此,由于第一次之后的空间%s,扫描仪会不断消耗空白,直到读取不同的字符。

阅读:《C Printf 和 Scanf 参考》很好的教程。

相关问题:如果您有兴趣,还请阅读“将数据存储在输入数组中”问题并回答,它将对您有所帮助。

于 2013-10-15T15:36:27.313 回答
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
于 2013-10-15T15:53:22.083 回答