C 如何检查输入是否为负?
程序从用户处收到一个帐号,该帐号不能为负数 是否有其他方法检查它是否为阴性C 如何检查输入是否为负?,c,integer,C,Integer,程序从用户处收到一个帐号,该帐号不能为负数 是否有其他方法检查它是否为阴性 #include <stdio.h> int main(int argc, char * argv[]) { int account = 0; printf("Enter your account number:\n"); scanf("%d", &account); while(ac
#include <stdio.h>
int main(int argc, char * argv[])
{
int account = 0;
printf("Enter your account number:\n");
scanf("%d", &account);
while(account<0)
{
printf("Error: Enter a valid account number.\n");
scanf("%d", &account);
}
}
#包括
int main(int argc,char*argv[])
{
int账户=0;
printf(“输入您的账号:\n”);
scanf(“%d”和“帐户”);
而(帐户您只能安全地从用户输入中读取char
,因此您需要读取char*
,然后将其转换为其他类型。对于您的问题,您可以执行以下操作:
char account_str[MAX_char];
无符号整数帐户=0;
布尔检查=假;
printf(“输入您的账号:\n”);
做
{
fgets(account_str,MAX_CHAR,stdin);//读取帐号(作为字符串)
支票=isPosNumStr(账户);
//isPosNumStr是一个个人函数,用于确定字符串是否只有
//数字和为正
如果(!检查){
printf(“错误:输入有效的帐号。\n”);
}
}同时(!检查)
account=atoi(account_str);//将字符串转换为int
#包括
/*对于帐号,您应该使用“long”而不是“int”,
这是因为帐号需要更大的内存分配。
我建议你寻找“int”极限来理解这一点*/
长期账户;
void main(){
printf(“输入您的账号:\n”);
scanf(“%ld”和“帐户”);
虽然(NumbAccount尽管问题没有提供导致您注意到的行为的示例输入,但您可能遇到了溢出问题
int
type,在大多数使用4字节存储的现代计算机中,可以表示-2147483648到2147483647之间的整数。如果您提供的值大于最大正数(int\u MAX
)该值需要存储更多的字节,因此在实际存储的字节中,最高有效位的信息丢失,结果值可能会在负值范围内。对于较大的负值也可能发生同样的情况
您可以使用长整数,以便使用8位,范围更大:从-9223372036854775808到9223372036854775807
long num;
scanf ("%ld", &num);
我想强调的是,无论您使用的字节数是多少,计算机中的数字表示都会受到限制。如果这些限制不符合您的应用要求,您也必须改变您的方法
- 使用,如果发生溢出或下溢,它会以正确的返回值警告您
- 获取整个字符串并自己解析
帐户类型是什么?你能发布一个完整的程序吗?使用#include..
和int main()
等等?然后是会产生错误的确切数字?唯一完全确定的方法是读取字符串,并确保它仅由字符“0”到“9”组成(可能还有输入或其他空格),然后将该字符串转换为一个值,例如,strtoul()
我不知道您的意思,完整的示例比您的代码段大约4行:#include
int main()
{
和}
。您至少可以添加产生错误的数字吗?我没有得到您想要的结果(可能是因为你一直在改变问题),您的程序执行了应该执行的操作。现在您询问是否有其他方法来检查负数,但删除了它不起作用的提及,您到底想要什么?我只能使用整数。我只需要检查负数numbers@JoanaFlong
变量是整数。您正在使用scanf(“%ld”,&NumbAccount);
在第一个输入中,但scanf(“%d”,&NumbAccount);
在第二个输入中。如果您想使用long
@JohnDoe,我忘记了在第二个scanf中放置“%ld”,谢谢您的更正。为什么更改正确的int main(int argc,char*argv[])
从问题到回答中不正确的void main()
现在就有意义了!该程序预计不会收到很长的数字。
long num;
scanf ("%ld", &num);