永发信息网

scanf输如的问题

答案:5  悬赏:80  手机版
解决时间 2021-12-18 23:53
  • 提问者网友:记得曾经
  • 2021-12-18 10:09
用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后回车总是多个空行,需要再回车才停,怎样避免这种情况
最佳答案
  • 五星知识达人网友:胯下狙击手
  • 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);}
}
全部回答
  • 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); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯