用C语言写个程序,输入三个数字,比如可能是123,也可以是带连字符1-2-3.但输出都必须是 1-2-3。不能用数组,输入只能用scanf或者getchar。小弟初学c,希望各高手不吝赐教
我自己写的如下
main(){
char a1,a2,a3,a4,a5;
char b= '-';
scanf("%c%c%c%c%c",&a1,&a2,&a3,&a4,&a5);
if (a4==10){
printf("%c%c%c%c%c",a1,b,a2,b,a3);
}
else{printf("%c%c%c%c%c",a1,a2,a3,a4,a5);}
}
如果输入123后回车总是多个空行,需要再回车才停,怎样避免这种情况
scanf输如的问题
答案:5 悬赏:80 手机版
解决时间 2021-12-18 23:53
- 提问者网友:记得曾经
- 2021-12-18 10:09
最佳答案
- 五星知识达人网友:胯下狙击手
- 2022-01-05 15:20
你调试,在if(a4==10)那儿设置个断点,会看到a4,a5均为10 (如果空那一行你再按回车).
输入123,回车会产生两个字符一个是10(换行)一个是13(回车),10保存到a4中,而13是用作scanf函数判断是否输入完成,并没有保存到a5中。现在a5还没有从输入流中得到值,所以会出现你的那种情况,让你继续输入。我给你的代码改了下:
void main()
{
char a1,a2,a3,a4,a5;
char b= '-';
scanf("%c%c%c%c",&a1,&a2,&a3,&a4);
if (a4==10){
printf("%c%c%c%c%c",a1,b,a2,b,a3);
}
else{
scanf("%c",&a5);
printf("%c%c%c%c%c",a1,a2,a3,a4,a5);}
}
输入123,回车会产生两个字符一个是10(换行)一个是13(回车),10保存到a4中,而13是用作scanf函数判断是否输入完成,并没有保存到a5中。现在a5还没有从输入流中得到值,所以会出现你的那种情况,让你继续输入。我给你的代码改了下:
void main()
{
char a1,a2,a3,a4,a5;
char b= '-';
scanf("%c%c%c%c",&a1,&a2,&a3,&a4);
if (a4==10){
printf("%c%c%c%c%c",a1,b,a2,b,a3);
}
else{
scanf("%c",&a5);
printf("%c%c%c%c%c",a1,a2,a3,a4,a5);}
}
全部回答
- 1楼网友:末日狂欢
- 2022-01-05 20:08
这是因为语句 scanf("%c%c%c%c%c",&a1,&a2,&a3,&a4,&a5); 需要输入的是五个字符,而你输入123回车(转义字符回车被复制给a4),此时仍有a5尚未赋值,再次回车,这时a5被赋值为回车,scanf语句结束。当然也可以在第一个回车后输入任意其他字符再回车,此时a5 将接受那个任意的字符。由于a4 接受的是回车,回车的ASCII值为10,if 判断语句为真。程序仍然会执行
printf("%c%c%c%c%c",a1,b,a2,b,a3);语句。 输入:1-2-3
- 2楼网友:孤独的牧羊人
- 2022-01-05 18:48
# include<stdio.h>
# define n 10
main()
{int i;
float b[n];
for(i=0;i<n;i++)
{scanf("%f",&b[i]);
printf("%f ",b[i]);
if(i%5==4)
printf("\n");
}
printf("\n");
}
这是我随便写的一个程序,你参考下,下图为运行结果
- 3楼网友:老鼠爱大米
- 2022-01-05 17:43
//declear i to index postion 2 and 4.
int i=0;
while((a=getchar())!=EOF)
{
if(a>='0'&&a<='9'&&(i==2||i==4))
{
putchar('-');
putchar(a);
}
else if(a>='0'&&a<='9')
{
putchar(a);
}
else if(a=='-')
{
putchar(a);
}
i++;
}
- 4楼网友:不甚了了
- 2022-01-05 16:46
#include
int main()
{
char a1, a2, a3, c;
int i = 0;
while((c = getchar()) != '\n') {
if(c == '-')
continue;
else
switch(i)
{
case 0: a1 = c; break;
case 1: a2 = c; break;
case 2: a3 = c;
}
if(++i == 3) break;
}
printf("%c-%c-%c\n", a1,a2,a3);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯