【发布时间】:2018-02-09 02:43:43
【问题描述】:
我正在开发一个程序,该程序应该接受用户的指令并用它做一些事情。它使用类和对象来知道要做什么。但是,有些命令只要求用户输入 2 个东西,而其他命令则需要输入 3、4 个等。例如:
request> balance 2
这个调用是检索客户 2 的余额。但是这个调用:
request> deposit 2 30
这应该是向客户 2 的账户存入 30 美元。
如何让程序了解用户可以输入 2 个由空格分隔的变量,或者更多?
我曾想过也许将整个用户输入作为一个字符串,然后解析可能会更容易......
char temp[257];
scanf("%s", temp);
但是,如果您调试并输出这个所谓的字符串,它只会输出用户输入的最后一项。所以如果用户输入了
request> balance 3
它只抓取 3 并将其存储到 temp...
我想你们明白了,我需要能够为终端提供多个字符串、整数等,并将每个单独的字符串存储到自己的变量中。任何帮助将不胜感激!
一些伪代码供参考:
#include <iostream>
#include <stdio.h>
#include <cstdlib.h>
including namespace std;
int main()
{
char temp[257];
int x, y, z;
printf("request: ");
scanf("%s", temp); // I need this to be able to scan more than one
// thing, and know where to store them
scanf("%s %d %d", temp, x, y);
// because if I do this ^^, then it will just hang if I only need x and
// not y.
// Do some random stuff w/ variables now
return 0;
}
【问题讨论】:
-
现在读完了,也许吧,但我的眼睛看起来更安抚了:D
-
您的第一个问题是您使用了错误的语言。这不是 C++,而是 C。在 C 中,如果您想读取整行文本作为输入,则该函数称为
fgets()。您将把整行文本读入一个大小合适的char数组(当然是检查溢出),一旦整行文本被读取,解析读取的行以获取有效命令。尝试使用scanf()吞下输入,一次一个令牌,这只是一种挫败感。正如你已经发现的那样。它可以工作,但非常困难并且充满了雷区。只需使用fgets。 -
我正在读取 fgets() 语法作为想要从流中读取,我将如何将用户输入转换为流或将其用作流?非常感谢。
-
一般需要先读行,tokenize,然后对第一个token进行分类。从那里您应该知道有效命令需要多少其他令牌以及它们各自代表什么,假设它们是位置的。