c语言输入输出

http://blog.csdn.net/pipisorry/article/details/41219551

C语言基本输入输出

标准输入scanf

 scanf("%s", a);

C语言字符串读取数据sscanf

sscanf() - 从一个字符串中读进与指定格式相符的数据。
swscanf()- 用于处理宽字符字符串,和sscanf功能相同。

c++用代码如何实现向输入缓冲区写入数据

未解决

C语言基本输出printf()

printf函数的返回值

http://www.360doc.com/content/11/1105/23/1317564_162120554.shtml

关于printf()函数的返回值问题

C语言字符串输出sprintf()

将各种类型的数据构造成字符串
sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
sprintf 是个变参函数,定义如下:
  int sprintf( char *buffer, const char *format [, argument] ... );
  除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数格式化字符串上。

[sprintf()的用法]

皮皮blog



非格式化输入输出puts()\gets()函数

可以由上面讲述的标准格式化输入输出函数代替, 但这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较方便。

1. puts()函数

    puts()函数用来向标准输出设备(屏幕)写字符串并换行,

调用格式为:    puts(s);

    其中s为字符串变量(字符串数组名或字符串指针)。

    puts()函数的作用与语printf("%s\n", s)相同。

  1. main()  {  
  2.   
  3.      char s[20], *f;   
  4.   
  5.      strcpy(s, "Hello world!"); /*字符串数组变量赋值*/  
  6.   
  7.      f="Thank you";                     /*字符串指针变量赋值*/  
  8.   
  9.      puts(s);  
  10.   
  11.      puts(f);  
  12.   
  13. }  

说明:

    (1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。

    (2). 可以将字符串直接写入puts()函数中。如:puts("Hello, Turbo C2.0");

2. gets()函数

    gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。

调用格式为:    gets(s);

    其中s为字符串变量(字符串数组名或字符串指针)。

    gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,

空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。

  1.     main(){  
  2.   
  3.          char s[20], *f;  
  4.   
  5.          printf("input sth\n");  
  6.   
  7.          gets(s);                      /*等待输入字符串直到回车结束*/  
  8.   
  9.          puts(s);                      /*将输入的字符串输出*/  
  10.   
  11.          puts("input sth\n");  
  12.   
  13.          gets(f);  
  14.   
  15.          puts(f);  
  16.   

[puts()和gets()函数 用法 ()]

c语言中读入带空格的字符串

问题:
 scanf("%s", a);
运行输入hello world  
回车
则输入到a的只是空格之前的部分,怎样把空格之后的部分也输出?
1. scanf( "%[^\n]", str );
#include <stdio.h> int main(){ char str[50]; scanf( "%[^\n]", str ); printf( "%s\n", str ); return 0; }

scanf中的正则表达式

1、定制自己的扫描集 %[abc]、%[a-z]、%[^abc]、%[^a-z],比isdigit()、isalpha()更加灵活。[]内是匹配的字符,^表示求反集。
int i;
char str[80], str2[80];
// scanf("%d%[abc]%s", &i, str, str2);  
// printf("%d %s   %s\n",i,str,str2);
// scanf("%[a-zA-Z0-9]", str);
// scanf("%[^abce]", str);
scanf("%[^a-z]", str);
printf("%s\n",str);
2、读入一个地址并显示内存地址的内容
int main(void){
char ch='c';
printf("%p\n", &ch); // print the address of ch.
char *p;
cout<<"Enter an address: ";
scanf("%p", &p);     //input the address displayed above
printf("Value at location %p is %c\n",p,*p);
return 0;
}
3、丢弃不想要的空白符:scanf("%c %c");
4、控制字符串中的非空白符:导致scanf()读入并丢弃输入流中的一个匹配字符。"%d,%d";
5、压缩输入:在格式码前加上*,则用户就可以告诉scanf()读这个域,但不把它赋予任何变量。
    scanf("%c%*c, &ch); 使用此方法可以在字符处理时吃掉多余的回车。


2.scanf()
int t[999];
int sum=0;
while(scanf("%c",&t[sum++])!=EOF);

3.gets()\fgets()

#include <stdio.h>  
//char *fgets( char *str, int num, FILE *stream );
int main(){
    char buffer[10];
    //fgets(buffer,10,stdin); //带有回车符
    gets(buffer);    //没有回车符
 
    printf("%s",buffer);
    return 0;
}

more:
gets() 不检查字符串容量,有可能越界写数据,用户可不一定给你按套路出牌,可能输入长达300字节甚至2k字节的字符串,这样的话很危险
虽然strlen,strcyp等等这些函数因为追求高效率也不会检查指针是否为空,指针是否可写,但是这些函数是C程序员来操作的,C程序员有正确使用函数的素质。
但是gets() 是用户来输入,用户并不知道字符串上限,而且就算知道,也不一定有素质去按规定使用,要多多注意
用fgets(str,80,stdin);就不危险了,fgets比较安全

皮皮blog



c语言文件读取和输入输出

C语言文件读取fscanf()

函数名: fscanf

简述:C语言中基本的文件操作

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。

用法:

1
int fscanf( FILE *stream,constchar*format,[argument...]);
FILE *stream:文件指针;
char *format:格式字符串;
[argument...]:输入列表。
返回值为输入数据个数
例如:
1
2
3
4
5
FILE *fp;
chara[10];
intb;
doublec;
fscanf (fp, "%s%d%lf" ,a,&b,&c)
返回值:整型,成功读入的参数的个数

格式字符说明
常用基本参数对照:
       %d:读入一个十进制整数.
%i :读入十进制, 八进制,十六进制整数,与%d类似,但是在编译时通过数据前置或后置来区分进制,如加入“0x”则是十六进制,加入“0”则为八进制。例如串“031”使用%d时会被算作31,但是使用%i时会算作25.
%u:读入一个无符号十进制整数.
%f %F %g %G : 用来输入实数,可以用小数形式或指数形式输入.
%x %X: 读入十六进制整数.
%o': 读入 八进制整数.
%s : 读入一个字符串,遇空字符‘\0'结束。
%c : 读入一个字符。无法读入空值。空格可以被读入。
附加格式说明 字符表修饰符说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
示例说明
如果要求从标准输入中输入一串字符串和一个整型数,那么参数“%s%d”表示什么呢?默认情况下,在终端上(这里假设程序为控制台应用程序)输入第一个参数的值的时候敲下回车,则在第二行输入的为第二个参数值,采用这种输入方法那么格式字符的形式就无关紧要了。
这里要特殊说明的是如果参数在同一行给出,那么格式字符的参数与终端的输入会有什么关系。举个例子:如果格式字符为“%s+%d”,那么参数的输入就应该为 string + integer。

http://baike.baidu.com/view/656694.htm

http://blog.csdn.net/jhg1204/article/details/7932187
c语言中所有文件操作函数详解:http://www.2cto.com/kf/201207/143344.html
皮皮blog


C语言控制台字体颜色设置

一、设置字体颜色:
1. 0 = 黑色       8 = 灰色
    1 = 蓝色       9 = 淡蓝色
    2 = 绿色       A = 淡绿色
    3 = 浅绿色     B = 淡浅绿色
    4 = 红色       C = 淡红色
    5 = 紫色       D = 淡紫色
    6 = 黄色       E = 淡黄色
    7 = 白色       F = 亮白色 
#include <stdlib.h>
system("color 2");system("color F");
2.
VC中要调用windows API来改变字体颜色。
#include  <windows.h> 
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
printf("Hello\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
printf("Hello\n");

其中FOREGROUND颜色只有四种:GREEN,BLUE,RED,INTENSITY(加强)

WinCon.h:
#define FOREGROUND_BLUE      0x0001 // text color contains blue.
#define FOREGROUND_GREEN     0x0002 // text color contains green.
#define FOREGROUND_RED       0x0004 // text color contains red.
#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define BACKGROUND_BLUE      0x0010 // background color contains blue.
#define BACKGROUND_GREEN     0x0020 // background color contains green.
#define BACKGROUND_RED       0x0040 // background color contains red.
#define BACKGROUND_INTENSITY 0x0080

其他颜色都是基于红绿蓝三原色来调和而成:
红色+绿色=黄色 
绿色+蓝色=青色 
红色+蓝色=品红 

红色+绿色+蓝色=白色

from: http://blog.csdn.net/pipisorry/article/details/41219551

ref:cin、cin.get()、cin.getline()、getline()、gets()函数的用法


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值