c语言数据类型异常,请牛人解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言数据类型异常,请牛人解答相关的知识,希望对你有一定的参考价值。

下面的代码,改变了数据类型,但运行的结果还有问题,请高人帮忙运行一下,并查看原因给予解答,谢谢
# include <stdio.h>

void main()

int num;
/* 下面定义的各变量,分别代表个位,十位,百位,千位,万位,十万位以及位数 */
int indiv, ten, hundred, thousand;
int ten_thousand, hundred_thousand, place;

printf("请输入一个整数(0~999999):");
scanf("%d", &num);

/* 判断变量num的位数 */
if(num > 99999)
place = 6;
else if(num > 9999)
place = 5;
else if(num > 999)
place = 4;
else if(num > 99)
place = 3;
else if(num > 9)
place = 2;
else
place = 1;
printf("place = %d\n", place);

printf("每位数字为:");

/* 求出num在各位上的值 */
hundred_thousand = num/100000;
ten_thousand = (num - hundred_thousand*100000)/10000;
thousand = (num - hundred_thousand*100000 - ten_thousand*10000)/1000;
hundred = (num - hundred_thousand*100000 - ten_thousand*10000
- thousand*1000)/100;
ten = (num - hundred_thousand*100000 - ten_thousand*10000
- thousand*1000 - hundred*100)/10;
indiv = num - hundred_thousand*100000 - ten_thousand*10000
- thousand*1000 - hundred*100 - ten*10;

/* 判断变量num的位数,并根据位数做出相应的输出 */
switch(place)

case 1: printf("%d", indiv);
printf("\n反序数字为:");
printf("%d\n", indiv);
break;
case 2: printf("%d, %d", ten, indiv);
printf("\n反序数字为:");
printf("%d%d\n", indiv, ten);
break;
case 3: printf("%d, %d, %d", hundred, ten, indiv);
printf("\n反序数字为:");
printf("%d%d%d\n", indiv, ten, hundred);
break;
case 4: printf("%d, %d, %d, %d", thousand, hundred, ten, indiv);
printf("\n反序数字为:");
printf("%d%d%d%d\n", indiv, ten, hundred, thousand);
break;
case 5: printf("%d, %d, %d, %d, %d", ten_thousand, thousand,
hundred, ten, indiv);
printf("\n反序数字为:");
printf("%d%d%d%d%d\n", indiv, ten, hundred,
thousand, ten_thousand);
break;
case 6: printf("%d, %d, %d, %d, %d, %d", hundred_thousand,
ten_thousand, thousand, hundred, ten, indiv);
printf("\n反序数字为:");
printf("%d%d%d%d%d%d\n", indiv, ten, hundred, thousand,
ten_thousand, hundred_thousand);
break;
default: printf("Not find.\n");
break;

getch();

我看了下(我现在不方便编译…没条件…),除了num应该换成long以为…似乎没得错…但是你这个程序写得复杂了…因为你只用反序输出每位的内容…所以…(我只写了个函数…没编译的…如果有错,应该好改)
void func(long num)

if(num==0)
printf("0");
else
while(num>0)
printf("%ld ", num%10), num/=10;
printf("\n");

这样可以反序输出了…如果你还想指明哪一位,可用数组将英文单词装好,然后3用脚标输出便OK
参考技术A int 在不同编译系统中长度不一样,如在 TURBO C 中就是 2B,最大数为32768,在 Visual C++ 中为 4B ,最大值为 2 的 32 次方减1。所以你的错误应该是在 Turbo C 环境中数值越界。故可修改为 long 型。 参考技术B int num; 改为long num;

scanf("%d", &num); 改为scanf("%ld", &num);
因为你要求的输入的数范围是0~999999,你定义一个int 型的num它最大为32767啊!当你输入的数大于32767不就发生错误了吗?
参考技术C 恶 num改成 long int试试 参考技术D bu会

#yyds干货盘点#小谈C#异常

开篇我先问一下各位,C#异常的主要类型是什么?如何使用它们?我相信有一部分人答不上来,那么这篇文章将回答这两个问题以及与之相关的问题。让我们开始吧!!!

一、有什么异常?

异常是处理错误的机制,表示执行流程的突然中断。一旦引发异常执行就会停止,如果未处理异常,应用程序就会崩溃。那么我们该如何引发或捕获异常呢?这一部分将会来解答这个问题。

C#异常剖析
  1. try

可以使用它来包裹住可能引发异常的代码。例如下面的代码:

string content = string.Empty;try{    content = System.IO.File.ReadAllText(@"g:\\test.txt");}

上面代码中我们使用ReadAllText静态方法来读取指定文件的内容,但是该文件可能不存在,在这种情况下会引发异常。因此我们使用try来将其包裹住。但是仅仅只有try还是不够的,我们可以看到错误窗口中显示了这么一个错误提示:

#yyds干货盘点#小谈C#异常_强制转换在这里插入图片描述

显而易见,VS提示我们还需要catch或finally代码块,因为处理异常但没有执行处理部分是没有任何意义的。

  1. catch

catch代码块使我们能够处理异常。我们将上面的代码补充完整:

static void Main(string[] args){    string content = string.Empty;    try    {           Console.WriteLine("NO1");        content = System.IO.File.ReadAllText(@"g:\\test.txt");        Console.WriteLine("NO2");    }    catch    {        Console.WriteLine("发生异常");    }}

如果不存在test.txt这个文件,运行上面的代码,会看到以下内容:

NO1发生异常

因为文件不存在引发System.FileNotFoundException异常,执行流程被中断。try块中的“NO2”没有被输出,而是输出了catch块中的内容。

  1. finally

在了解了try和catch之后,我们来学习finally,它在开发中经常使用但又经常被误解的代码块。finally块是一种确保无论是否引发异常,都会执行给定代码段的方式。我们进一步补充前面的代码:

static void Main(string[] args){    string content = string.Empty;    try    {           Console.WriteLine("NO1");        content = System.IO.File.ReadAllText(@"g:\\test.txt");        Console.WriteLine("NO2");    }    catch    {        Console.WriteLine("发生异常");    }    finally    {        Console.WriteLine("不管错与对,我都在");    }}

运行代码,如果文件不存在,控制台将输出如下内容:

NO1发生异常不管错与对,我都在

我们将test.txt文件创建到g盘根目录,再次运行代码,控制台将输出如下内容:

NO1NO2不管错与对,我都在

从上面两种情况可以看出,在没有引发异常的情况下catch块中没有执行任何代码。但不管是否发生异常,finally都执行了代码。

  1. throw
    当涉及到异常时,我们需要自定义异常告知调用发发生了异常,这时可以使用throw关键字:
public ProductService(IProductRepository repository){    if (repository == null)        throw new ArgumentNullException();    this.repository = repository;}

二、常见的.NET异常

以下是常见的.NET异常列表:

  1. System.NullReferenceException
    这时最常见的异常,当我们尝试调用方法、属性、索引器等时,就有可能会抛出此异常。例如下面的代码将导致空引用异常:
Person p = people.Where(x => x.SSN == "123").FirstOrDefault();string name = p.Name;

在上面的示例中,我们查询符合SSN等于123的第一个person对象。如果没有任何值,则它将返回该类型的默认值。由于Person是引用类型,因此其返回值为null。然后我们调用name,这时就会依引发空引用异常。但是这各一场我们一般不会抛出也不会捕获,因为这个异常通常是因为我们编码不当考虑不周导致的。如果要向调用方告知不可传Null,则应该抛出System.ArgumentNullException异常。

  1. System.IndexOutOfRangeException
    这个异常和上一个异常一样,我们一般不会进行抛出和捕获,这时因为这个异常通常是我们使用无效的索引值访问数组、列表以及任何可索引序列中的元素时引发的。
  2. System.IO.IOException
    这个异常是IO操作期间发生引发的。与前两个异常不同,我们可能会不时捕捉或抛出它。IOException类实际上包含了一些更具体的异常,常见的有:
  • DirectoryNotFoundException
  • EndOfStreamException
  • FileNotFoundException
  • FileLoadException
  • PathTooLongException
  1. System.Net.WebException
    这个异常与网络有关,处理此异常时,一定要验证Response属性,这个属性包含远程主机返回的响应。
  2. System.Data.SqlClient.SqlException
    这个异常与数据库有关。SQL Server 返回错误或警告时将引发这个异常。SqlException类具有一个称为Errors属性,该属性是一个包含SqlError该类的一个或多个实例集合。包含有关发生的错误的详细信息。
  3. System.StackOverflowException
    当执行堆栈溢出时会抛出此异常,这通常意味着递归出错,代码有太多的嵌套方法调用。这个异常是无法捕获的从.NET 2.0起就没办法捕获,这意味着当抛出该异常时几乎没有其他选择。默认情况下,代码执行过程将被终止。
  4. System.InvalidCastException
    当执行了无效的强制转换或显式转换时引发的异常。以下代码将引发此类型的异常:
object o = "10";int x = (int)o;

我们可以利用泛型来防止陷入需要强制转换的情况。

三、总结

错误处理是经常被忽略的话题,如果没有可靠的错误处理方法,您的应用程序有可能质量会不过关。通过本文,我希望通过定义异常的概念并对C#异常的主要类型进行快速概述,来帮助你解决一些问题。但是本文并没有涵盖异常处理的全部,我希望这本文可以开始引导你对该主题的学习。

以上是关于c语言数据类型异常,请牛人解答的主要内容,如果未能解决你的问题,请参考以下文章

请牛人解释一下jquery和html5的关系?

第3课 - 异常类构建

Python基本内置数据类型都有哪些

C语言的数据类型分为几种?

C51的数据类型和C语言的数据类型的区别?

C语言 四种基本数据类型