学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
 29 123
发新话题
打印

scanf函数中关于“\n”的疑惑

本主题由 卧龙孔明 于 2008-7-25 10:54 解除精华

scanf函数中关于“\n”的疑惑

#include <stdio.h>
#include <math.h>
void main()
{int a,b,h,f;
scanf("%d,%d\n",&h.&f);
a=2*h-f/2;b=f/2-h;
printf("%d,%d\n",a,b);
}
按照scanf("%d,%d\n",&h,&f);输入“4,12”时,输出的答案错误;但当输出“4空格12”时,结果计算正确,去掉“\n”后,输入“4,12”答案也正确;请问“\n”在这起了什么作用?

TOP

scanf("%d,%d",&h.&f);当输入数字的时候,必须是4,12
scanf("%d %d",&h.&f);当输入数字的时候,必须是4(空格)12
scanf里面的格式必须和外面的格式完全一致。这是必须的要求。

对于字符‘\n’是换行的意思,当‘\n’出现在scanf中时,意味着必须在输入后面输入‘\n’才可以。

scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
例:
scanf("%d,%d",&a,&b);
输入: 3,4 ↙(逗号与"%d,%d"中的逗号对应)
scanf("a=%d,b=%d",&a,&b);
输入: a=3,b=4 ↙("a=","b=",逗号与"%d,%d"中的"a=","b="及逗号对应)

TOP

一般在函数scanf中,不用‘\n’字符

TOP

4空格12能计算,但是结果是错的,是按照a=4,b=1来计算的。

估计是C的缓冲区的引起的问题。
那个字符还在缓冲区,出不来。

TOP

谢谢一楼和三楼的解释,茅塞顿开,在scanf()中,“”内的内容应该全部输入,哪怕是转义字符

TOP

xiaomengxia2008 的解释是错误的
为了中国软件工业的未来,有爱心的朋友请不要帮忙代做作业,或者至少是收费服务!如果您不需要钱,或者您不愿收费用于自己,请把收取的钱用于支援山区贫困学生…谢谢大家!

TOP

我在tc环境中试过了
加上\n后,接收数据时,进入了死循环。
不行的

TOP

问这没有什么意义,你按照它的正确格式来就行了。

TOP

scanf()里格式控制所包含的内容,在键盘输入时必须分毫不差的输入,包括转义字符(貌似是这样。。)

TOP

我认为,scanf格式串中的“空白字符”('\t' , '\n' or ' ')会吸收掉输入时连续的若干个空白字符。这句话的意思你多试试便可以体会。

例:
复制内容到剪贴板
代码:
#include <stdio.h>
char buf[1000];
int main()
{
    int a,b;
    scanf("%d%d ",&a,&b);
    gets(buf);
    puts(buf);   
}
输入
复制内容到剪贴板
代码:
3 4

    here

TOP

 29 123
发新话题