- 主题:是因为我不了解scanf函数的特性么? (转载)
【 以下文字转载自 CPlusPlus 讨论区 】
发信人: sqsl (12345), 信区: CPlusPlus
标 题: 是因为我不了解scanf函数的特性么?
发信站: 水木社区 (Sun Oct 8 20:56:05 2023), 站内
下面这段程序,我输入b,回车后,只打印1和b就结束了。但是我如果把b换成\n,可以连着按5次回车打印出1,2,3,4,5(当然数字之间也打印了回车了)。
我没想明白是为啥,求专家能不嫌问题小指点一下
#include <stdlib.h>
#include <stdio.h>
int main()
{
int A[5]={1,2,3,4,5};
int i;
char a;
for (i=0;i<5;i++)
{
scanf("%c",&a);
if(a=='b')
{
printf("%4d\n",A[i]);
printf("%c\n",a);
}
else
{
return 0;
}
}
}
--
FROM 115.171.171.*
收到,谢谢!
【 在 z16166 的大作中提到: 】
:
: %c是每次输入一个字符,此时\n也是视为一个字符的。
:
: 所以第1种情况,是输入了'b'、'\n'两个字符,输入'b'时打印,输入'\n'时执行return。
:
--
FROM 115.171.171.*
对,我是这个意思。要实现输入b才执行打印的目的,我改了一下程序,运行了一下是可以,但不知道是否有点啰嗦:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int A[5]={1,2,3,4,5};
int i;
char a;
for (i=0;i<5;i++)
{
GO:
scanf("%c",&a);
if(a=='b')
{
system("cls");//清除以前的内容,留下最新打印的东西
printf("%d\n",A[i]);
printf("%c\n",a);
}
else if(a=='\n')
{
goto GO;
}
else
{
system("cls");
return 0;
}
【 在 z16166 的大作中提到: 】
: 他的意思是代码改成了if (a == '\n') 了,昨天我也是思考了一下才明白这个意思
:
--
FROM 111.193.229.*
这种情况下用哪个更合适?continue?
【 在 dormouseBHU 的大作中提到: 】
: 为啥要用goto…
--
FROM 111.193.229.*
噢 好的
【 在 z16166 的大作中提到: 】
: 新手不推荐用goto,这会导致奇葩的编码风格和混乱
: 尝试不要用goto。
--
FROM 111.193.233.*