一个学c语言中的小疑问……
在scanf("%d%d",&a,&b);中,输入数据可以用空格间隔,也可以用回车间隔,但是用逗号间隔的时候第二个数据就读不出来,这是为什么?比如:intmain(){i...
在scanf("%d%d",&a,&b);中,输入数据可以用空格间隔,也可以用回车间隔,但是用逗号间隔的时候第二个数据就读不出来,这是为什么?比如:
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
输入“8,6”输出
“a=8,b=259”
可是,为什么用空格间隔或者用回车就可以呢?它们3种方式有什么不同??? 展开
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
输入“8,6”输出
“a=8,b=259”
可是,为什么用空格间隔或者用回车就可以呢?它们3种方式有什么不同??? 展开
9个回答
展开全部
"%d%d"这是格式化字符串,对用户输入做了格式要求,如果格式化字符串中两个数据%d之间有明确的分隔符“ ”或","那么用户就得按照要求在输入时用指定的分隔符隔开两个数,
如果如本例所示没有明确分隔符,C标准默认以空格、回车或制表符为分隔符,
如果希望以","做分隔符,写入格式化字符串中即可:scanf("%d,%d",&a,&b); 这时如果输入以空格或回车分隔就不可以了。
如果如本例所示没有明确分隔符,C标准默认以空格、回车或制表符为分隔符,
如果希望以","做分隔符,写入格式化字符串中即可:scanf("%d,%d",&a,&b); 这时如果输入以空格或回车分隔就不可以了。
展开全部
这个问题就是一个问题,scanf函数。这个函数双引号中的东西,除了控制符(带百分号的)东西,其他东西最好别乱添加东西。如:
scanf("%d%d",&a,&b);这种方式,就只有控制符,这种情况下,默认的分割符是空格和回车。
第一:因为默认分隔符是空格所以可以输入:1空格2回车。你输入的内容实在缓冲区,回车之后开始正式的读入内存(刷新内存)。
第二:回车:每输入一个数按一次回车,如1回车,读入一个1,因为刚读入一个数,而控制符却有连个,这时候还要输入,但是缓冲区已经被刷新了,这时候输入2回车,再读入第二个数,然后读入完毕。
第三:如果你用逗号作为分隔符的话,系统不识别,所以读入错误。
还有一种情况就是,除了控制符,还有其他的东西,如:scanf("%d,%d",&a,&b);这里面的“,”就是其他东西了,scanf函数规定,除了控制符,其他东西都要原样输入,否则读入错误。也就是说,这时候你指定的分割符为“,”,若以输入的时候只能输入1,2回车,这样才能正确读入。(这时就不能用空格作为分割符了)。
再举一个例子:scanf("%dXXX%d",&a,&b);这时候你输入时只能这样:1XXX2
为什么尽量不让有其他的东西,是因为有些东西不是很好控制,很多人容易和printf函数弄混淆。很容易写成:scanf("%d%d\n",&a,&b);就多了一个\n(其实并没有起到换行的作用),就会出错了,而且还不容易发现,所以就scanf的时候要多多注意,不要乱在双引号中添加没用的东西。
scanf("%d%d",&a,&b);这种方式,就只有控制符,这种情况下,默认的分割符是空格和回车。
第一:因为默认分隔符是空格所以可以输入:1空格2回车。你输入的内容实在缓冲区,回车之后开始正式的读入内存(刷新内存)。
第二:回车:每输入一个数按一次回车,如1回车,读入一个1,因为刚读入一个数,而控制符却有连个,这时候还要输入,但是缓冲区已经被刷新了,这时候输入2回车,再读入第二个数,然后读入完毕。
第三:如果你用逗号作为分隔符的话,系统不识别,所以读入错误。
还有一种情况就是,除了控制符,还有其他的东西,如:scanf("%d,%d",&a,&b);这里面的“,”就是其他东西了,scanf函数规定,除了控制符,其他东西都要原样输入,否则读入错误。也就是说,这时候你指定的分割符为“,”,若以输入的时候只能输入1,2回车,这样才能正确读入。(这时就不能用空格作为分割符了)。
再举一个例子:scanf("%dXXX%d",&a,&b);这时候你输入时只能这样:1XXX2
为什么尽量不让有其他的东西,是因为有些东西不是很好控制,很多人容易和printf函数弄混淆。很容易写成:scanf("%d%d\n",&a,&b);就多了一个\n(其实并没有起到换行的作用),就会出错了,而且还不容易发现,所以就scanf的时候要多多注意,不要乱在双引号中添加没用的东西。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原因是你的输出和scanf里的要求输出不符啊!
你要是按空格键输出写成sacnf("%d %d",&a,&b);输入“8 6”再看看输出
你要是按逗号输出一个写成scanf("%d,%d",&a,&b);输入“8,6"在看看输出
你要是按空格键输出写成sacnf("%d %d",&a,&b);输入“8 6”再看看输出
你要是按逗号输出一个写成scanf("%d,%d",&a,&b);输入“8,6"在看看输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你看看 c primer plus 里面很多初学者的问题,他会详细回答你的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d%d",&a,&b);这条语句指定了两个输入整数之间是没有分隔符“,”的,所以只有第一个数据读入正确。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要看前面的scanf("%d%d",....)这两个%d中没有逗号 所以不行 scanf中你要注意输入数据跟前面的一致就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
更多回答(7)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询