C语言scanf输入char类型数据的问题
#include<stdio.h>#include<stdlib.h>intmain(){charc1,c2;scanf_s("%c%c",&c1,&c2);printf...
#include<stdio.h>#include<stdlib.h>int main(){ char c1, c2; scanf_s("%c %c", &c1, &c2); printf("c1=%c,c2=%c\n", c1, c2); system("pause");}
编译器我用的是Visual Studio Ultimate 2013, 用scanf会报错,必须用scanf_s.但是到网上查了这两个函数结果应该没有区别才对,不明白为什么执行不了 展开
编译器我用的是Visual Studio Ultimate 2013, 用scanf会报错,必须用scanf_s.但是到网上查了这两个函数结果应该没有区别才对,不明白为什么执行不了 展开
3个回答
展开全部
char类型数据在输入时,用scanf()函数输入时,格式控制串用%c,但由于输入的方式不同,代码要采用不同的语句进行控制。
输入一个字符,按一次回车
#include<stdio.h>
void main()
{
int i;
char ch;
for( i=0;i<10;i++ ){
printf("input %d : ", i+1);
scanf("%c%*c", &ch ); //用%*c吸收掉回车符。不然,下一次读字符,就会读到这个回车符。
printf("%c:%d\n", ch, ch ); //输出字符和ASCII值 %c表示输出按字符,%d表示输出按ascii值。
}
}
连续输入字符,直到回车结束(这时,不需要加过滤操作)
#include<stdio.h>
void main()
{
int i;
char ch;
for( i=0;i<10;i++ ){
scanf("%c", &ch ); //或用ch=getchar();
if ( ch=='\n')
break; //遇回车结束输入
printf("%c:%d\n", ch, ch ); //输出字符和ASCII值
}
}
用户在键盘输入时,所有的按键不会直接反应到程序变量中,而是先存储到输入缓存区中,程序在读取数据时,是从输入缓存中读取。所有的按键都会映射成相应的字符,如:回车、空格等都是有效的字符,所以,在读字符时,程序不会自动忽略它们,如果需要忽略,需要进行程序代码控制。
输入一个字符,按一次回车
#include<stdio.h>
void main()
{
int i;
char ch;
for( i=0;i<10;i++ ){
printf("input %d : ", i+1);
scanf("%c%*c", &ch ); //用%*c吸收掉回车符。不然,下一次读字符,就会读到这个回车符。
printf("%c:%d\n", ch, ch ); //输出字符和ASCII值 %c表示输出按字符,%d表示输出按ascii值。
}
}
连续输入字符,直到回车结束(这时,不需要加过滤操作)
#include<stdio.h>
void main()
{
int i;
char ch;
for( i=0;i<10;i++ ){
scanf("%c", &ch ); //或用ch=getchar();
if ( ch=='\n')
break; //遇回车结束输入
printf("%c:%d\n", ch, ch ); //输出字符和ASCII值
}
}
用户在键盘输入时,所有的按键不会直接反应到程序变量中,而是先存储到输入缓存区中,程序在读取数据时,是从输入缓存中读取。所有的按键都会映射成相应的字符,如:回车、空格等都是有效的字符,所以,在读字符时,程序不会自动忽略它们,如果需要忽略,需要进行程序代码控制。
展开全部
scanf_s与scanf的区别,举个例子。
char buf[5]={'\0'};
scanf("%s", buf);
如果输入1234567890,后面的部分会被写到别的空间上去。
以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取4个字符,因为buf[4]要 放'\0',相对更加安全。
这个版本默认scanf不够安全。
相关修改设置,可参考。
http://jingyan.baidu.com/article/363872ecd87e5d6e4ba16f1c.html
char buf[5]={'\0'};
scanf("%s", buf);
如果输入1234567890,后面的部分会被写到别的空间上去。
以上代码如果用scanf_s,第二行应改为scanf_s("%s",buf,5),表示最多读取4个字符,因为buf[4]要 放'\0',相对更加安全。
这个版本默认scanf不够安全。
相关修改设置,可参考。
http://jingyan.baidu.com/article/363872ecd87e5d6e4ba16f1c.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有些许区别。
scanf_s("%c %c", &c1,1, &c2,1);
追问
我试了,居然真的能运行了!意思是,要加上所占的字节?可是我输入数值就没问题 int a,b; scanf_s("%d %d", &a, &b);
追答
具体不是很清楚。现在确定的是%s%c是要加读入长度的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询