C语言数据类型的转换让我来说说这个问题吧 。
一.自动转换
自动转换遵循以下规则:
1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算 。
2) 转换按数据长度增加的方向进行,以保证精度不降低 。如int型和long型运算时,先把int量转成long型后再进行运算 。
a.若两种类型的字节数不同,转换成字节数高的类型
b.若两种类型的字节数相同,且一种有符号 , 一种无符号,则转换成无符号类型
3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式 , 也要先转换成double型,再作运算 。
4)char型和short型参与运算时,必须先转换成int型 。
5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型 。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度 , 丢失的部分按四舍五入向前舍入 。
二.隐式转换
隐式类型转换分三种,即算术转换、赋值转换和输出转换 。
1.算术转换
进行算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同一类型的数据才能运算,算术转换原则为:
在进行运算时 , 以表达式中最长类型为主,将其他类型位据均转换成该类型,如:
(1)若运算数中有double型或float型,则其他类型数据均转换成double类型进行运算 。
(2)若运算数中最长的类型为long型.则其他类型数均转换成long型数 。
(3)若运算数中最长类型为int型,则char型也转换成int型进行运算 。算术转换是在运算过程中自动完成的 。
2.赋值转换
进行赋值操作时,赋值运算符右边的数据类型必须转换成赋值号左边的类型,若右边的数据类型的长度大于左边,则要进行截断或舍入操作 。
下面用一实例说明:
char ch;
int i,result;
float f;
double d;
result=ch/i (f*d-i);
(1)首先计算 ch/i,ch → int型,ch/i → int型 。
(2)接着计算 f*d-i , 由于最长型为double型,故f→double型,i→double型,f*d-i→double型 。
(3)(ch/i) 和(f*d-i)进行加运算 , 由于f*d-i为double型,故ch/i→double型,ch/i (f*d-i)→double型 。
(4)由于result为int型,故ch/i (f*d-i)→double→int,即进行截断与舍入,最后取值为整型 。
3.输出转换
在程序中将数据用printf函数以指定格式输出时,当要输出的盐据类型与输出格式不符时,便自动进行类型转换,如一个long型数据用整型格式(%d)输出时,则相当于将long型转换成整型(int)数据输出;一个字符(char)型数据用整型格式输出时,相当于将char型转换成int型输出 。
注意:较长型数据转换成短型数据输出时,其值不能超出短型数据允许的值范围,否则转换时将出错 。如:
long a=80000;
printf("%d",a);
运行结果为14464,因为int型允许的最大值为32767,80000超出此值,故结果取以32768为模的余数,即进行如下取余运算:
(80000-32768)-32768=14464;
输出的数据类型与输出格式不符时常常发生错误,如:
int d=9;
printf("%f",d);
或
float c=3.2;
printf("%d",c);
将产生错误的结果 。
同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型 。以下是自动类型转换的基本规则:
1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int) 。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(promotion)” 。
2. 按照从高到低的顺序给各种数据类型分等级 , 依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int 。这里有一个小小的例外 , 如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上 。char 和 short 并没有出现于这个等级列表 , 是因为它们应该已经被升级成了 int 或者 unsigned int 。
3. 在任何涉及两种数据类型的操作中 , 它们之间等级较低的类型会被转换成等级较高的类型 。
4. 在赋值语句中,= 右边的值在赋予 = 左边的变量之前 , 首先要将右边的值的数据类型转换成左边变量的类型 。也就是说,左边变量是什么数据类型,右边的值就要转换成什么数据类型的值 。这个过程可能导致右边的值的类型升级 , 也可能导致其类型降级(demotion) 。所谓“降级”,是指等级较高的类型被转换成等级较低的类型 。
5. 作为参数传递给函数时,char 和 short 会被转换成 int,float 会被转换成 double 。使用函数原型可以避免这种自动升级 。
三.强制转换
强制类型转换是通过类型转换运算来实现的 。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型 。自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换 。例如: (float) a 把a转换为实型,(int)(x y) 把x y的结果转换为整型 。在使用强制转换时应注意以下问题:
1.类型说明符和表达式都必须加括号(单个变量可以不加括号) , 如把(int)(x y)写成(int)x y则成了把x转换成int型之后再与y相加了 。
2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型 。
例1:
main()
{
float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
}
f--5.75
将float f强制转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用 , 是临时的,而f本身的类型并不改变 。因此,(int)f的值为 5(删去了小数)而f的值仍为5.75 。
关于c语言中的类型转换 , 谢谢了?。。。?/h2>main() /*No.1主函数*/
{
printf("Welcome to study C program.\n");
printf("This is Lesson One.\n");
}
程序写好后,按“F9”,然后按"Alt-F-O",就进入DOS提示符下
去执行它 。
Welcome to study C program.
This is Lesson One.
怎么样?你自己的程序也变成了*.exe型的可执行文件了 。按
“EXIT”可以返回到系统 。
上例中“main()”是程序的主函数 。C 语言程序由一系列函数组
成,而且每个程序必须有且只有一个主函数 , 即“main()” 。在第一
行末还有/* */所夹的内容,它在程序编译时不参与编译,只说明程
序的作用 , 即起注释作用 。所以在你抄本教程的例子时可不抄这一部
分内容 。
每个函数必须由“{ }”括起来,每句程序必须用“;”结束 。
第3行第4行中printf是C语言用来在屏幕上输出信息的一个重要
函数,最简单的格式是
printf("显示的内容");
字符串后面的“\n”不会显示在屏幕上,它的意思是“回车换行”
接下来,你把第3行后面的“\n”去掉 , 再按“F9”后去执行,
你就会发现两行内容都印在了一行 。
Welcome to study C program.This is Lesson One.
如果在“\n”后加上“\a”,即每显示一行出现一次响铃 。
如下表,是“\”后面字符的特殊含义 。
\r
回车不换行(到行首)
\t
横向跳到下一输出位
\b
向左退格
\\
输出字符"\"
好 。下面把程序中“printf("This is Lesson One.\n");”
换成“printf("\tThis is Lesson One.\n");”,执行一下程序 。
Welcome to study C program.
This is Lesson One.
下面再换成“printf("This is \b\bLesson One.\n");”再执行
一下 。
Welcome to study C program.
This iLesson One.
程序中的“s ”并不是没有显示,而是显示后 , 又被“Le”给盖
上了 。
要想在屏幕上输出一个“C:\”则要写上“printf("C:\\");”
好了,第一节就要此为止 。你赶快复习一个 。你知道今天所学的
知识了吗?(只要学会了这些就别再多学了,贪多吃不烂 。)
1.printf("显示信息") 最简单的输出格式
2.“{ }” 用来括起函数
“;” 每句程序的结束标志
3.“\t”“\n”“\b”“\a”是什么意思?
4.主程序的标志是什么?
5./* */ 是用来注释程序
不过先别关机 , 如果你用的是UCDOS或是成然汉字,你可以把显
示的信息用中文代替 。如:printf("我一定要把C语言学会!\n");
您的当前位置是:首页电脑知识文本方式下的显示
--------------------------------------------------------------------------------
文本方式下的显示
C语言中,图形函数大致可分为两类:字符模式函数和图形模式函数 。本节我们练习使用字符模式函数 。
使用字符模式函数应该在程序中联入conio.h头部文件 。
下面是一些函数的作用
1)voidclreol();从光标处删除到本行末
2)voiddelline();清除本行内容,下面内容上提一行
delline();函数实际上还起到了向上卷屏的作用 。
3)voidinsline();在光标所在行插入一空行,原来该行及以
下各行皆向下移一行
4)intwherex();返回当前光标的x(行)坐标
5)intwherey();返回当前光标的y(列)坐标
6)voidhighvideo();字符输出用高亮度字符
7)voidlowvideo();字符输出用低亮度字符
8)voidnormvideo();字符输出用普通亮度字符
在以上的各函数中皆不带参数,当然也可以写成括号中有void的形式:
void wherex(void);还可以写成wherex();
清屏、清行、向后删行、插行的操作真有些CCED、WPS等编辑软件的风格 , 就是在你平时的屏幕设计中也用少不了 。返回坐标的函数则给你的设计提供每一个环节的光标坐标值 。有利于你前后响应 。字
符亮度的改变则会让你的字符显示出层次感,怎么样,赶快试试吧:
/* No32.c*/
# include "stdio.h"
# include "conio.h"
main()
{ clrscr();
gotoxy(10,1);
cprintf("甜密密,");
highvideo();/*高亮度显示*/
cprintf("\r\n你笑得甜密密,");
lowvideo();/*低亮度显示*/
cprintf("\r\n好象花儿开在春风里,");
normvideo();/*普通亮度显示*/
gotoxy(10,4); cprintf("开在春风里");
cprintf("\r\n在哪里,在哪里见过你?");
printf("\r\n你的笑容这样熟悉 。");
gotoxy(10,20);printf("任意键删去光标后的内容");
gotoxy(18,3);getch();
gotoxy(18,3);
clreol();/*删去光标后字符*/
gotoxy(10,20);printf("任意键删去本行的内容");
gotoxy(18,3);getch();
delline();/*删去本行*/
gotoxy(10,20);printf("任意键在本行插一空行");
gotoxy(18,3);getch();
insline();/*插入一空行*/
gotoxy(1,7);
}
应该注意的是,要发挥本节所讲的函数的作用,在显示时不能使printf函数,应使用cprintf函数 。它的使用方法和printf的完全一样 , 只不过后面的cprintf能发挥亮度设置和颜色设置的作用 。前者
printf函数只有一种颜色和单一的亮度 。
在cprintf函数中 , “\n”的作用不再是既回到行首又换行,它只起一个换行的作用,所以要把内容在行首显示必须再加一个“\r”
上面的程序不是一真正对大家有用的程序,只是用来说明一个刚刚学到的几个函数的作用 。在conio.h中还有一些字符型函数 , 它们都是带参数的 。
9)void textcolor(颜色);定义显示字符颜色
10) void textbackground(颜色);定义背景颜色
下面是颜色数字和颜色对照表
BLACK0黑DARKGRAY8深灰
BLUE1兰LIGHTBLUE9淡兰
GREEN2绿LIGHTGREEN10淡绿
CYAN3青LIGHTCYAN11淡青
RED4红LIGHTRED12淡红
MAGENTA5洋红LIGHTMAGENTA 13淡洋红
BROWN6棕YELLOW14黄
LIGHTGRAY7淡灰WHILT15白
背景颜色值只能是0-7共8个数字或其对应的英文大写单词 。而前景(即字符)的颜色可以是0-15共16种颜色或其对应的英文大写单词 。当你定义的前景和背景相同时,屏幕上看不到输出的内容 。
textcolor(4);和textcolor(RED);效果是相同的 。
设置屏幕颜色还可以使用
11) void textattr(前景颜色 (背景颜色));
但这里的背景颜色要有“4” 。如白底红字,就是:
textattr(RED (WHITE4));
12) int gettext(左上角x,左上角y,右下角x,右下角y,内存指针);
把定义的长方形区域内的内容存在内存中
13) int puttext(左上角x,左上角y,右下角x,右下角y,内存指针);
把内存中存好的内容显示在新定义的矩形块内
这里的内存指针也可用字符形数组来代替 。需要注意的是内存大小应该是所存内容的“行数*列数*2” 。比如把第3行第5列到第6行第75列的数据存到内存中,可以用下面的片段:
char buffer[4*70*2];
gettext(5,3,75,6,buffer);
然后你就可以用puttext函数来显示它了 。
14) void movetext(左上角x,左上角y,右下角x,右下角y,
新左上角x,新左上角y);
把矩形块移到新左上角(x,y)决定的地方
15) void window(左上角x,左上角y,右下角x,右下角y);
定义一个窗口,大小就是上面参数决定的长方形
利用这一函数,你可以在屏幕上任何一个地方开辟一个窗口,并在上面显示需要的内容 。这丝毫不影响屏幕其它地方的内容 。当你定义了窗口后,你只能操作该窗口,gotoxy(),wherex(),wherey(),
clrscr()等等函数所表示的都是你定义窗口中的情况 。实际上这就为我们的操作带来了方便,你想操作哪儿,就定义哪儿,想回到平时状态的屏幕,就定义一个最大的窗口,window(1,1,80,25);就复原了 。
No.33号例子是利用puttext和gettext函数以及颜色定义来模仿CCED和WPS的菜单显示 。但这个小程序没有可移动的光条,也没有菜单中内容的相应执行程序,只是演示一下屏幕的保存和释放而已 。
/* No33.c */
#include "conio.h"
#include "stdio.h"
main()
{int i=1,j,ch;
char buffer[6*50*2];/*开辟内存空间的大小*/
clrscr();
textcolor(0);/*定义字符颜色*/
textbackground(7);/*定义背景颜色*/
gotoxy(1,1);
cprintf("功能1功能2功能3");
textbackground(0);
textcolor(14);
gotoxy(1,2);
cprintf("What's your name?你叫什么名字");
cprintf("\n\rMy name is Wang Dong.我叫王东.");
cprintf("\n\rHow old are are you?你多大了 . ");
cprintf("\n\rI'm thirty-four.我四十四了");
cprintf("\n\r\n\rThis is Lesson One.这是第一课");
while(1)
{ j=i;
textcolor(0);
textbackground(7);
if(i==1)
{ gettext(1,2,13,5,buffer);
gotoxy(2,2);cprintf("│第一课│");
gotoxy(2,3);cprintf("│第二课│");
gotoxy(2,4);cprintf("│第三课│");
gotoxy(2,5);cprintf("└———┘");
}
if(i==2)
{ gettext(13,2,25,5,buffer);
gotoxy(14,2);cprintf("│菜单一│");
gotoxy(14,3);cprintf("│菜单二│");
gotoxy(14,4);cprintf("│菜单三│");
gotoxy(14,5);cprintf("└———┘");
}
if(i==3)
{ gettext(25,2,37,5,buffer);
gotoxy(26,2);cprintf("│说明A │");
gotoxy(26,3);cprintf("│说明B │");
gotoxy(26,4);cprintf("│说明C │");
gotoxy(26,5);cprintf("└———┘");
}
textcolor(14);
gotoxy(10,20);printf("→向右移动←向左移动Esc 退出");
ch=getch();
if((ch==75)(i==1))/*菜单个数的判断*/
{i=3; ch=0;}
if((ch==77)(i==3))/*ASCII码 77是右箭头*/
{i=1; ch=0;}
if((ch==75)(i1))/*ASCII码 75是左箭头*/
i--;
if((ch==77)(i3))
i;
if(ch==27)
break;
puttext(j*12-11,2,j*12 1,5,buffer);
}
}
您的当前位置是:首页电脑知识基本输入输出
--------------------------------------------------------------------------------
基本输入输出
基本输入输出函数
下面要进行的工作是编个程序,你输入什么,它就显示什么 。程序如No.2所示 。
main()/* No.2 */
{
char ch[12];/*定义一个字符串*/
int i;/*定义一个整(数)型变量*/
printf("请输入一个字符串:");/*显示提示信息*/
scanf("%s",ch);/*用输入函数输入字符串*/
printf("请输入一个整数:");
scanf("%d",i);/*输入一个整数*/
printf("输入的字符串是:%s 输入的数字是%d",ch,i);
}
如果你输入的字符串是“中华人民共和国”,数字是2000,那么编译成EXE文件后执行
请输入一个字符串:中华人民共和国
请输入一个整数:2000
输入的字符串是:中华人民共和国 输入的数字是2000
怎么样?比No.1程序要好一些吧,想显示什么就显示什么 。你还
可以显示代数式的结果:如把第8行最末尾的数据“i”换成“i*10”
printf("输入的字符串是:%s 输入的数字是%d",ch,i*10);
运行程序时,输出如下:
请输入一个字符串:中华人民共和国
请输入一个整数:2000
输入的字符串是:中华人民共和国 输入的数字是20000
本程序注释较多,这样就增加了程序的可读性 。通过此程序我们应学习哪些知识呢?
第3行和第4行是对数据进行定义,任何一个变量在C 语言中必须先定义才能使用 。
第5行和第7行的scanf()是输入函数,用来输入用户信息 。其格式是:
scanf("数据格式说明",数据列表);
之所以是“数据列表”,就是说这里的数据,既可以是一个,也可以是多个,既可以是相同格式的数据,也可以是不同格式的数据 。
scanf("%s%d",ch,i);
它说明的含义是让用户输入一个字符串再输入一个整数,中间用空格分开 。
在格式说明中“%s”“%d”是什么意思呢?“%s”说明输入的是 字符串,“%d”说明输入的是整数
注意:C语言中,整数叫“整型数据” 。其它格式如下表所示 %d
十进制整数
%o
八进制整数
%x
十六进制整数
%f
小数或指数形式数据
%c
输入单个字符
上表格式说明也同样适用于printf()函数 。如第8行就是一例 。需要注意的是,在输入数字或单个字符时,数据列表必须用取地址符号,即“” , 而在输出时则不用 。
下面再看一看No.3号程序
main() /*No.3*/
{ int a=5,b=10,c,d;
c=200;
d=a*(b c);
printf("a*(b c)=%d",d);
}
在这个小程序里 , 我们计算了一个小代数式的值,然后输出了它的值 。需要说明的是,第二行中 , 在定义变量时可以赋初值 。也可以象第三行那样 , 在定义后再赋初值 。
在C语言中,除了整数外,还有无符号整数、实数(浮点数)、长整数、双清度实数 。
在C语言中,整数并不是可以无限大,它的大小是有一定限度的,超过了这个限制,程序就会出错 。大小规定如下表所示:
数据类型
存储位(bit)
数值范围
整型 int
16
-32768—32767
无符号整数unsigned
16
0—65535
实数 float
32
10E38—10E38
长整型 long int
32
-2147483648—2147483647
双精度实数 double
64
10E-308—10E308
我们下面练习一个No.4号程序
main() /* No.4 */
{ int a=1000,b=2500,i1;
long c=1000,b=2500,i2;
i1=a*b;
i2=c*d;
printf("整型数据1000*2500的积是%d\n",i1);
printf("长整型数据1000*2500的积是%ld\n",i2);
}
执行程序 , 屏幕输出:
整型数据1000*2500的积是9632
长整型数据1000*2500的积是2500000
上例中,因为整型数据超出了32767的限制,所以出错 。如果计
算结果超过32767,在设计时就应该定义成长整型数据 。
今天学习的内容太多了,下面的内容你会多少?
1.输入函数scanf()和输出函数printf()的格式是怎样的?
2.scanf()在输入字符串时和输入数字时有什么区别?
3.输入输出时“%s %d %o %x %c %f”表示什么意思?
4.你能大致了角数字数据类型和最大值最小值吗?
头关机以前,你能否再看一眼No.2、No.3、No.4三个程序
您的当前位置是:首页电脑知识定位输出
--------------------------------------------------------------------------------
定位输出
在系统程序中,显示内容是方便的,任何一个位置都可以显示,
那么,我们怎样随意显示输出内容呢?在C语言中,光标定位用:
gotoxy(列坐标,行坐标);
下面的No.5例子就是它的具体应用:
/*No5.c*/
#include "stdio.h"/*连入头部文件stdio.h*/
main()
{
char ch;int i;
gotoxy(10,4);/*把光标定位在(10,4)坐标处*/
printf("输入一个字符,它便以大写的形式输出 ");
ch=getchar();/*用getchar()函数输入一个字符*/
if ((ch='a')(ch='z'))
ch=ch-32;
gotoxy(10,7);
printf("输入一个整数,便把它大1和小1的数输出 ");
scanf("%d",i);
gotoxy(15,13);printf("你输入的字符大写为%c",ch);
gotoxy(15,14);
printf("你输入的%d两侧的数分别为%d,%d",i,i-1,i 1);
}
第1行是在编译时把stdio.h连入程序文件 。具体作用见No.6解释
在上程序的第4行中,两类数据定义占了一行,这是允许的 。C语
言程序写法是很随便的,它可以一行一句 , 也可以一行写多句,上例
的第13行也是这样书写的 。不过一般情况下我们不这样写 。为了程序
在检查和阅读时方便,我们一般一行写一句,而且程序中一个层次的
内容和另一个层次的内容使用缩格排版格式 。如上程序的main()函数
上例中的if()语句等 。以后程序中层次越多,越应该形成这样的好习
惯 。
如果你输入的字符是m,数字是11,则屏幕输出如下:
输入一个字符,它便以大写的形式输入 m
输入一个整数 , 便把它大1和小1的数输出 11
【c语言默认的函数类型转换 c语言默认的函数类型转换为什么】你输入的字符大写为M
你输入的11两侧的数分别为10,12
在No.5程序中出现了一个新的函数 , 它是字符输入函数,它的作用是只输入一个字符 。
除了它 , 还有两个字符输入函数,如右表
getchar()
字符显示,回车键结束
getche()
字符显示,不必按回车
getch()
字符不显示,不必按回车
上述三个字符输入函数使用时没有参数,即()中没有内容 。
在C语言中,字符也有大小 , 它按ASCII表中的值排列大小 。可以
进行字符间及字符与数字间的运算 。如上例的“ch=ch-32;” 。比较
字符大小时,可用字符直接比较,如上例的第7行那样;也可以用数
值进行比较,上第7行可改为:
if ((ch=97)(ch=122))
上一行是程序中的条件语句 , 它的简单格式是
if(条件表达式)
{内容1;}
else
{内容2;}
如果条件表达式成立,执行内容1,不成立则执行内容2 。else语
句可有可无 。当执行内容只有一行时,可以省略内容两侧的“{ }”
上述程序的执行内容就没有“{ }”
在上例的“if ((ch='a') (ch='z'))”中“”是逻辑运
算符,逻辑运算符如下表所示
逻辑与
||
逻辑或
!
逻辑非
任何时候 , 学习都是为了应用 。下面我们编写一个电子表程序:
/*No6.c*/
# include "stdio.h"/*连入头部文件stdio.h*/
# include "dos.h"/*连入头部文件dos.h*/
main()
{ struct time t;/*定义时间变量 t */
struct date d;/*定义日期变量 d */
clrscr();/*清屏*/
getdate(d);/*获取当前日期*/
gotoxy(33,4);
printf("%d.%d.%d",d.da_year,d.da_mon,d.da_day);
while(!kbhit())/*如果没有按键,则执行下面内容*/
{ gotoxy(34,6);
gettime(t);/*获取当前时间*/
printf("%d:%d:%d",t.ti_hour,t.ti_min,t.ti_sec);
}
}
C语言程序特别灵活,它可以把别的程序或文件中的内容,连入
到你的程序中,在C语言中已经有许多我们用到的内容放在了头部文
件中,本例中就是利用了"dos.h"头部文件中的时间和日期的定义 。
这种连入,既可以是C语言内部的头部文件(*.h),也可以是你自已
写的文件 。你自己被连入的文件既可以是“*.h”文件,也可以是
“*.c”文件 。文件连入写法有两种:
#include "dos.h"用这种写法 dos.h 文件放在当前目录中
#include dos.h用这种写法 dos.h 文件放在TC\INCLUDE目
录中 。
第6行中“clrscr();”是清屏函数,它不带参数,作用:清屏
第11行的“kbhit()”函数是用来检测用户是否按了键,但它不
能测试出你按的什么键 。要知道按的是什么,必须和输入函数配合使
用 。
第11行有“while(!kbhit())”是个循环语句,它的意思是:只
要没有按键,程序便执行{...}所括的内容 。
本节内容提纲如下:
1.光标定位:gotoxy(列从标,行坐标);
2.getchar()、getcha()、getch()三个字符输入函数输入时情况
是不同的,一个是光标是否回显,一个是是否用回车结束
3.if(...) 如果...便执行{...}中的内容
4. 逻辑与,||逻辑或,!逻辑非
5.#include "..." 把...文件和主程序连在一起编译
6.kbhit()测试按键是否按
您的当前位置是:首页电脑知识使用文件
--------------------------------------------------------------------------------
使用文件
到此为止,我们仍停留在屏上,一些需要的东西还不能做为资料保存 。要想把你看到的保留下来,就得把资料存储在磁盘文件中,本节我们用两个例子来学习使用文件 。
No.7程序是模仿DOS命令中copy的程序 。
/*No7.c*/
#include "stdio.h"/*连入stdio.h*/
main(int argc,char *argv[])/*带参数的程序(带命令行参数)*/
{
char ch;
FILE *in,*out;/*定义文件指针*/
if(argc!=3)/*如果命令行数目不等于3*/
{ printf("格式应该是: No7 源文件名 目标文件名\n");
exit(1);}/*退出程序*/
if((in=fopen(argv[1],"r"))==NULL)/*打开源文件*/
{ printf("文件不存在或磁盘没准备好!\n");
exit(1);}
if((out=fopen(argv[2],"w"))==NULL)
{ printf("文件复制失败!\n");
exit(1);}
while((ch=fgetc(in))!=EOF)/*如果读出的数据不是结尾标志*/
fputc(ch,out);/*把读出的数据写到目标文件中*/
fclose(in);/*关闭文件*/
fclose(out);
printf(" 1 个文件复制成功 \n");
}
上述程序的主程序是带参数的,argc表示命令行的元素个数,argv[],用来接收程序所带的参数 。这些参数的接收都是在执行程序时自动完成的 。如用上例程序把名为“HEBEI”文件,复制到名为“BEIFEN”的文件,命令行应执行:
no7 hebei beifen
执行后,argc值为3 , argv[1]成为“hebei”,argv[2]赋值为“beifen” 。
上例中“exit(1);”表示退出程序的执行,返回到DOS提示符 。
文件打开格式用
文件指针=fopen(文件名 , "打开方式");
if((in=fopen(argv[1],"r"))==NULL)意思是“如果文件打开失败” , 则... ...
打开方式中“r”是打开文件后 , 只能从文件中读取信息 。“w”是打开文件后,只能从文件中写信息 。下面是打开方式及功能列表
r
打开一个文本文件读
rb
打开一个二进制文件读
w
打开一个文本文件写
wb
打开一个二进制文件写
a
打开一个文本文件添加
ab
打开一个二进制文件添加
r
打开一个文本文件读写
r b
打开一个二进制文件读写
w
生成一个文本文件读写
w b
生成一个二进制文件读写
a
打开或生成文本文件读写
a b
打开或生成二进制文件读写
“fclose(文件指针);”用来关闭已打开的文件 。如上面的
fclose(in);fclose(out);就是应用 。
fgetc(文件指针);从文件中读取一个字符 。
fputc(字符,文件指针); 把字符写到文件中去 。
EOF是文件结束标志 。
下面我们编个简易的文本文件阅读器,它相当于DOS中的“type 文件名 | more”,也就是分页显示文本文件 。
/*No8.c*/
#include "stdio.h"
main(int argc,char *argv[])
{
FILE *fp;
int i=1;
char ch;
if(argc2)/*如果命令行参数少于两个*/
{ printf("正确使用方法是: no8 文本文件名");
exit(1);}/*退出*/
if((fp=fopen(argv[1],"r"))==NULL)/*如果文件打开失败*/
{ printf("%s不存在",argv[1]);
exit(1);}
else
{ clrscr();/*清屏*/
while((ch=fgetc(fp))!=EOF)/*读取文件中的字符*/
{ printf("%c",ch);/*显示读出的字符*/
if(ch=='\n')/*如果读出的字符是回车*/
i;
if(i=23)/*如果行数到24行*/
{ printf("Any key to continue......\n");
i=1;
getch();/*输入任一个字符*/
}
}
}
fclose(fp);
}
本例中没有什么更难理解的 。需要提醒大家的是:在程序中你打开一个文件后,别忘了在结束程序之前,一定要把打开的文件关闭 。
在上述程序中,使用了条件语句中的else语句 。在使用else语句时,如果语句不
c语言 所有类型转换函数1.atoi(),atol(),atof();int,long,float
2sprintf(s(数组)c语言默认的函数类型转换,“%d“c语言默认的函数类型转换,num)c语言默认的函数类型转换;
3(int)等等强制转换
4 int num = atoi("11123");
C语言数据类型如何转换?不是有强制类型转换吗?
强制类型转换强制类型转换
当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换 , 将操作数转化为所需要的类型 。强制类型转换具有两种形式,称为显式强制转换和隐式强制类型转换 。
1、显式强制类型转换
显式强制类型转换需要使用强制类型转换运算符,格式如下:
type(expression)
或
(type)expression
其中,type为类型描述符 , 如int,float等 。expression为表达式 。经强制类型转换运算符运算后,返回一个具有type类型的数值 , 这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变 , 例如:
int nVar=0xab65;
char cChar=char (nVar);
上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类型转换后nVar的值并未改变 。
2、隐式强制类型转换
隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中 。在赋值表达式中,如果赋值符左右两侧的操作数类型不同 , 则将赋值符右边操作数强制转换为赋值符左侧的类型数值后,赋值给赋值符左侧的变量 。在函数调用时,如果return后面表达式的类型与函数返回值类型不同,则在返回值时将return后面表达式的数值强制转换为函数返回值类型后,再将值返回,如:
int nVar;
double dVar=3.88;
nVar=dVar;//执行本句后,nVar的值为3,而dVar的值仍是3.88
1,若已知x,y为double类型,则表达式:x=1,y=x 3/2结果是多少?。?
因为x,y都是double型,所以执行了y=x 3/2这个语句后 , 会输出小树部分,double型默认的是小数点后几位我忘了 , 你自己调试下,就会明白了!
C语言 函数调用 类型转换char s[]="I am a teacher!";s是数组名c语言默认的函数类型转换,是首地址 , 而s[0]是第一个元素值,是个字符c语言默认的函数类型转换!
关于c语言默认的函数类型转换和c语言默认的函数类型转换为什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 倒序查看命令linux,linux按时间倒序命令
- 跨境电商如何才能拿到融资,跨境电商是真的吗
- 微信直播的投诉在那里找,微信直播 投诉
- 野go语言 野犬翻译
- go语言mysql语句,go语言连接mysql数据库
- 包含linux5命令怎么联网的词条
- 如何设置word2010目录,word2010怎样设置目录
- php检索数据库匹配 php和mysql实现搜索功能
- pg数据库字符串转日期,pg字符串转日期函数