永发信息网

scanf("\n%c",&k);改写成C++形式

答案:1  悬赏:60  手机版
解决时间 2021-03-29 05:30
scanf("\n%c",&k);改写成C++形式
最佳答案
scanf()函数的用法
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);
格式化字符串包括以下三类不同的字符;
1、 格式化说明符:
格式化说明符与printf()函数中的格式说明符基本相同。但和printf()函数中格式字符串的用法有一些小区别。我们来看下面这个表。

格式字符
说明
%d 从键盘输入十进制整数
%o 从键盘输入八进制整数
%x 从键盘输入十六进制整数
%c 从键盘输入一个字符
%s 从键盘输入一个字符串
%f 从键盘输入一个实数
%e 与%f的作用相同

附加格式说明字符表
字符
说明
L 输入"长"数据。 H 输入"短"数据。 M 指定输入数据所占宽度。 * 空读一个数据

2、 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。
3、 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
地址表是需要读入的所有变量的地址,而不是变量本身。这与printf()函数完全不同,要特别注意。各个变量的地址之间同","分开。
例如:
#include
void main()
{
int i, j;
printf("i, j=?\n");
scanf("%d, %d", &i, &j);
}
上例中的scanf()函数先读一个整型数,然后把接着输入的逗号剔除掉,最后读入另一个整型数。如果","这一特定字符没有找到,scanf()函数就终止。若参数之间的分隔符为空格,则参数之间必须输入一个或多个空格。
说明:
(1) 对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。
例如:
#include
void main()
{
char *p, str[20];
p = new char[20];
scanf("%s", p);
scanf("%s", str);
printf("%s\n", p);
printf("%s\n", str);
}
(2) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
如上例中若规定只能输入10字符给字符串指针p,则第一条scanf() 函数语句变为:scanf("%10s", p);
程序运行时一旦输入字符个数大于10,p就不再继续读入,而后面的一个读入函数即scanf("%s", str)就会从第11个字符开始读入。
(3) scanf()函数中没有精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
(4) scanf中要求给出变量地址,如给出变量名则会出错
如 scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。
(5) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
(6) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
例如:scanf("%c%c%c",&a,&b,&c);
输入为:
d e f
则把'd'赋予a, ' (空格)'赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。
只有当输入为:def 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。 如果在格式控制中加入空格作为间隔,
如 scanf ("%c %c %c",&a,&b,&c);则输入时各数据之间可加空格。
我们用一些例子来说明一些规则:
#include
void main()
{
char a,b;
printf("input character a,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);
}
由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符,见下面的输入运行情况: input character a,b
MN (你输入的值)
MN (屏幕上显示的值)
#include
void main()
{
char a,b;
printf("input character a,b\n");
scanf("%c %c",&a,&b);
printf("\n%c%c\n",a,b);
}本例表示scanf格式控制串"%c %c"之间有空格时, 输入的数据之间可以有空格间隔。
(7) 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
例如:
scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作间隔符,故输入时应为: 5,6,7 (与scanf 双引号之间的格式必须一样)
又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为 a=5,b=6,c=7
如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。
#include
void main()
{
int a;
printf("input a number");
scanf("%d",&a);
printf("%ld",a);
}
由于输入数据类型为整型, 而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。输出并不是输入的值。
如将Scanf("%d",&a); 语句改为 scanf("%ld",&a);
输入数据为长整型,输入输出数据才相等。
三、 常见错误及对策
问题1:
我初学C程序,所以提的问题很浅,希望您不要见笑。我自己编了一个程序,但运行的结果与我预期的不一样。
#include
void main()
{
static int a[2][3]={{1,3,4},{7,9,6}};
int i,j,k;
for(k=1;k<=2;k++)
{printf("Please input num:");
scanf("%d %d",&i,&j);
if(i<2&&j<3)
printf("num=%d\n",a[i][j]);
else printf("Input is error,\n");
}
printf("programm is complete.\n");
}
我想将第8行改为
scanf("i=%d j=%d",&i,&j);
则程序运行结果变成
please input num:i=1 j=2
num=6
num=6(我原本希望能重复第一行再让我输入)
Programm is complete.
为什么第二次不能输入?
答复:
我使用Turbo C 2.0证实存在你说的问题。象scanf("i=%d j=%d",&i,&j);这样的输入方式比较特别,TC 2.0显然在第一次输入后没有象正常情况一样清楚输入缓冲区,这样第二次执行scanf时,程序并没有让你输入而是直接读入上次输入的结果。如果你一定要这么做,应该在scanf之前加上:
fflush(stdin);
这样清楚掉键盘缓冲区。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
惠州市惠阳区秋长镇白石工业区怎么来惠州陈江
桥西区张家口70年代网吧台球我想知道这个在什
芦荟原来长的很好,但这几天突然弯曲了
求可爱的昵称 和小动物有关的
箱根的具体位置在日本哪里?
树脂烤瓷牙到底好不好
请问除了LAVAZZA和ILLY品牌豆外还有什么品牌
炒米茶的功效
谁能帮我把这个符号上下颠倒过来呀 不胜感激
日语中为什么动词要变形?什么时候变形?
为什么从年赚几十万股票抽身转做期货
巳厘野道满的介绍
一桶果汁,小红喝了八分之三,明明喝了余下的
你以前遇到这样 那现在怎么样了?
bi站硬币怎么获得(已是正式会员)
推荐资讯
隔壁杀鸡的人每天凌晨杀鸡开机械吵死人,报警
炉渣作为建筑材料对重金属的含量有什么要求吗
中班语言神奇的农庄教案
用英文怎么说,你的房费欠400元
现在二手ps2多少钱,淘宝买安全么
海口高路华小区五证齐全吗?
我今年五十二岁了,在一家私人公司上班,在这
男命,甲寅丁卯己巳甲子,大运壬申,成三刑命
装系统失败amd apu平台
中国历史上五种社会形态所分属的时期是怎样划
我朋友叫我去他那里玩说了一句尽地主之谊,我
155555 ×424× 这个手机号怎么样?准备搞过
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?