【发布时间】:2014-11-20 09:26:41
【问题描述】:
我正在尝试使用函数 scanf 检查我的变量的类型。它适用于 Dev C++(我的输入是 int),但它不使用 Borland。这是我尝试过的:
AnsiString as = Edit1->Text;
string b = as.c_str();
int testb = atoi(b.c_str());
if(scanf("%i", &testb)==1){
do sth;
}
有什么想法吗?
[edit1] 移自 Spektre 的评论
我还有一个问题。我的输入值应该类似于xx-xx-xxxx,所以它是一个日期。
我必须检查日、月和年是否为整数。
我试过这样:
AnsiString a = Edit1->Text;
date = a.c_str();
if (a==AnsiString().sprintf("%i",atoi(a.SubString(0,2).c_str()))
&& a==AnsiString().sprintf("%i",atoi(a.SubString(3,2).c_str()))
&& a==AnsiString().sprintf("%i",atoi(a.SubString(6,4).c_str())) )
{
//do sth
}
- 但它只检查一天。有谁知道为什么? – J.B. 20 小时前
【问题讨论】:
-
当你说它不起作用时,你是什么意思?当你运行你展示的代码时会发生什么?您是否尝试过在调试器中运行并逐行逐行查看会发生什么?还有为什么要赋值给
testb,然后直接覆盖the value with ascanf`调用呢? -
你能解释一下这里是如何检查类型的吗?你计算
testb,然后在scanf中丢弃它的值。 -
我需要检查输入值是数字还是字符,因为我需要整数作为输入类型。
-
要转换字符串并验证字符串确实是整数,请使用例如
std::stoi(或者如果你没有,那么std::strtol)。 -
最好将Edit1输入类型设置为数字,并使用
Edit1->Text->ToInt()
标签: c++ scanf c++builder builder borland-c++