Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何检查输入是否为负?_C_Integer - Fatal编程技术网

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@JoanaF
long
变量是整数。您正在使用
scanf(“%ld”,&NumbAccount);
在第一个输入中,但
scanf(“%d”,&NumbAccount);
在第二个输入中。如果您想使用
long
@JohnDoe,我忘记了在第二个scanf中放置“%ld”,谢谢您的更正。为什么更改正确的
int main(int argc,char*argv[])
从问题到回答中不正确的
void main()
现在就有意义了!该程序预计不会收到很长的数字。
long num;
scanf ("%ld", &num);