C语言输入输出技巧

输入不说明有多少个Input Block,以EOF为结束标志。
参见:HDOJ_1089
while(scanf("%d %d",&a, &b) != EOF)  //scanf返回读入变量个数 EOF==-1
//while( cin >> a >> b )
       printf("%d\n",a+b);

输入是一整行的字符串的
参见:HDOJ_1048

http://acm.hdu.edu.cn/showproblem.php?pid=1048
C语法:
char buf[20];
gets(buf);
 

C++语法:
 
如果用string buf;来保存:
   
getline( cin , buf );
 
如果用char buf[ 255 ]; 来保存:
cin.getline( buf, 255 );

scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;

若使用gets函数,应为gets(str1);
 gets(str2); 字符串之间用回车符作分隔。

通常情况下,接受短字符用scanf函数,接受长字符用gets函数。

而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。

getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。
它的函数声明形式(函数原型)如下:
 
istream& getline(char line[], int size, char endchar = '\n');不用管它的返回类型,来关心它的三个参数:

char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。

int size : 最多接受几个字符?用户超过size的输入都将不被接受。

char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。

结合后两个参数,getline可以方便地实现:
用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。

char name[4];
cin.getline(name,4,'\n');

由于 endchar 默认已经是 '\n',所以后面那行也可以写成:

cin.getline(name,4);

__int64 I;
标准输入64位长整型变量I:scanf(“%I64d”,&I);
标准输出64位长整型变量I:printf(“%I64d”,I);

ACM中的64位整数2008-10-07 14:59在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即 0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。
那遇到比40亿要大的数怎么办呢?这时就要用到C++的64位扩展了。不同的编译器对64位整数的扩展有所不同。基于ACM的需要,下面仅介绍VC6.0与g++编译器的扩展。
VCVC6.0 的64位整数分别叫做__int64与unsigned __int64,其范围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036854775807与 0~18446744073709551615(约1800亿亿)。对64位整数的运算与32位整数基本相同,都支持四则运算与位运算等。当进行64位与 32位的混合运算时,32位整数会被隐式转换成64位整数。但是,VC的输入输出与__int64的兼容就不是很好了,如果你写下这样一段代码:
1  __int64 a;
2 cin >> a;
3 cout << a;
那 么,在第2行会收到“error C2679: binary '>>' : no operator defined which takes a right-hand operand of type '__int64' (or there is no acceptable conversion)”的错误;在第3行会收到“error C2593: 'operator <<' is ambiguous”的错误。那是不是就不能进行输入输出呢?当然不是,你可以使用C的写法:
scanf("%I64d",&a);
printf("%I64d",a);就可以正确输入输出了。当使用unsigned __int64时,把"I64d"改为"I64u"就可以了。
OJ通常使用g++编译器。其64位扩展方式与VC有所不同,它们分别叫做long long 与 unsigned long long。处理规模与除输入输出外的使用方法同上。对于输入输出,它的扩展比VC好。既可以使用
1long long a;
2cin>>a;
3cout<<a;也可以使用
scanf("%lld",&a);
printf("%lld",a);
使用无符号数时,将"%lld"改成"%llu"即可。

  最后我补充一点:作为一个特例,如果你使用的是Dev-C++的g++编译器,它使用的是"%I64d"而非"%lld"。

 

转载于:https://www.cnblogs.com/uestc-msc/p/3374737.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值