小小小小的问题,却是大大难的问题,各大高手come here!!!!
程序中要求用户输入一个数据,这个数据可以是:数字类的,字符串类的,符号类的,然后我需要根据用户输入的不同类的数据进行不同程序段的的操作!
比如用户输入数字时,我的程序执行A段程序;输入字符串的时候我的程序自动选择执行B段程序;类似的效果…………
高手指教!
[解决办法]
那么, 我这样理解你看合适不合适:
1. 用户会有一些输入, 这个输入是字符串. // 别着急
2. 这串字符串可以转换成为其它类型. 比如 数字类型. // 请把所有可以转换的目标类型列全
3. 根据这张类型列表, 需要进行优先级处理. 比如, 能转 数字类型的就不当作字符串处理. // 请列出优先级顺序.
[解决办法]
楼主的意图不太明白,不过你不能保证用户输入时的输入,他可能是某一种,但也可能是混合的有数字有字母有符号(不过其实他们都是一家的ASC码),这样的话,岂不是要判断输入的串到底是不是纯粹的数字|字母|符号?
我觉得你应该直接定义一个char类型的数组, char所占用的字节也最少,然后根据ASC码判断你所需要的各个类型,这样相信即使混合的也没有什么问题了
请指教
[解决办法]
template <class T>
void DoSomething(T input)
[
if (typeid(input).name() == typeid(int).name())//int
{
DoInt();
}
if (typeid(input).name() == typeid(char).name())//char
{
DoChar();
}
if (typeid(input).name() == typeid(double).name())//double
{
DoDouble();
}
}
....
[解决办法]
用 typeid 还不如用 overload ?
关键是他好象不是这个意思.
[解决办法]
还有, typeid(input) == typeid(double) 不就好啦. 要 name 干嘛.
[解决办法]
我就不明白了, 用户哪有直接输入数字的. 那都是字符串啊. 程序里拿到数字, 那是因为函数进行过处理了.
控制台是如此, UI 也是如此. 不过是一些中间处理, 把原始的键盘输入, 在程序接手前, 先行处理成相应的类型.
又不是连接一些电气设备, 能直接给你个数字.
迷茫啊!
[解决办法]
mark
[解决办法]
yutaooo(旦见散分需快进, 莫等分尽空遗恨! → 今天,你散了没有?!) 所言极是。
自己分析输入字符串吧
string input;
getline(cin,input, '\n ');
checkinput(input);
[解决办法]
楼上的大哥, 05:29:16 还在回帖, 是通宵还是早起? 太强悍了吧!! 身体是本钱, 注意休息哦.
[解决办法]
同意ls的ls的
放到string里面再分别筛选不就ok?
[解决办法]
我写了一个. 你参考下:
// test2.cpp
// xp + vc-7_1
// cl -EHsc test2.cpp
#include <iostream>
#include <string>
#include <stdexcept>
bool is_number(std::string const & input) {
std::size_t size = input.size();
for(std::size_t index = 0; index != size; ++index)
if(input[index] < '0 ' || input[index] > '9 ')
return false;
return true;
}
std::string convert_number() {
for(;;) {
std::cout < < "please input number : ";
std::string input;
if(std::cin > > input)
if(is_number(input))
// convert
return std::string( "转换好的值。 ");
else
continue;
else
throw std::domain_error( " ");
}
}
bool is_continue() {
for(;;) {
std::cout < < "continue ?[yes/no] : ";
std::string input;
if(std::cin > > input)
if(input == "yes ")
return true;
else if(input == "no ")
return false;
else
continue;
else
throw std::domain_error( " ");
}
}
int main() {
try {
do {
std::cout < < convert_number() < < std::endl;
}
while(is_continue());
return EXIT_SUCCESS;
}
catch(std::domain_error) {
std::cerr < < "error " < < std::endl;
return EXIT_FAILURE;
}
}