为什么C语言运行的时候,输入数值时各参数用空格分开可以运行,而不用空格分开不能算出结果呢?

为什么C语言运行的时候,输入数值时各参数用空格分开可以运行,而不用空格分开不能算出结果呢?而且我scanf函数各参数没有用空格分开大神指点 还有就是第二个if函数为什么不能说c=0而要用c<=0呢

#include<stdio.h>int main(){ int a,b,c,semp; scanf("%d%d%d",&a,&b,&c); if(c>0) { semp=a; a=c; c=semp; printf("%d%d%d",a,b,c); } if(c<=0) { semp=a; a=b; b=semp; printf("%d%d",a,b); }
}
首先我用空格分开

可以运行
然后我不用空格分开怎么不可以运行呢

表示甚是疑惑

scanf在读取时遇到空格才把前面读到的内容赋给变量。你用空格分开时很自然三个变量都被赋了值。但是如果没有空格,scanf就认为你第一个变量的内容还没输入完,即使你输入“478回车”,因为有回车符,它也只会把478赋给第一个变量,而继续等待第二个变量的输入。如果你非要不输入空格就能正常运行,那只能写成scanf("%c%c%c",&a,&b,&c)这样了,然后再a-='0'这样把字符转成整型追问

%c不是字符吗,我用得到是int,你可以运行一下给我看看是什么样的吗

追答

%c是字符。因为你既想用%d又想不用空格,那是没有办法给后两个变量赋值的,除非你用回车(其实跟空格一样),而我说的这种方法只能勉强解决你的需求,但是如果你想输入一个多位数的整型那就没办法了,因为%c只是读取一个数字字符。说了这么多不知道你有没有听明白。。。额,我就劝你一句,别死抓着这种没意义的想法,用空格又何妨?反而不用要实现相同功能还更麻烦呢。。

追问

好吧,我们老师写了一个题目是直接输入123,然后输出321,不知道那是怎么弄的,你不能让我看看是什么样的?
话说a-='0'是何意思?

追答

恩恩。我想直接输入123,然后输出321应该就是将1、2、3三个字符存进字符变量里面然后直接输出的。或者是输入一个整型的123,然后对10取余得到个位并输出,然后除以10,再对10取余得到十位这样。。。

对于那个a-='0',例如,你输入1,这其实是一个字符,实际存储成它对应的ascii码。用它的ascii去减字符0的ascii码,得到的就是数字1。因为'0'的ascii为48,'1'的ascii为49,所以'1'-'0'=1,这个结果是个整型。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-25
因为你不用空格分开 系统认为你是在输入一个int 你还有两个int要输入 要输完才执行后面的追问

说的还是不懂,难道必须用空格分开我才能得到答案?怎么直接输入156,不用空格分开直接输出651呢?

为什么C语言运行的时候,输入数值时各参数用空格分开可以运行,而不用空...
你用空格分开时很自然三个变量都被赋了值。但是如果没有空格,scanf就认为你第一个变量的内容还没输入完,即使你输入“478回车”,因为有回车符,它也只会把478赋给第一个变量,而继续等待第二个变量的输入。如果你非要不输入空格就能正常运行,那只能写成scanf("%c%c%c",&a,&b,&c)这样了,...

c语言中,scanf函数中用%d,运行时输入数值时要用空格隔开才有结果,但如...
scanf函数中用%d,运行时输入数值时不要用空格隔开,就会把二个整数当作是一个整数;并且scanf读入数值时,会把前面的空格自动忽略的。但如果用%c就不行,因为空格也是一个字符,也可以用%c读入的。

用C语言编程时,对每行程序前的空格有什么要求?不使用空格行不行?
可以不使用空格。其实一般来说,用的不是空格,而是Tab这个键。为了使程序易于阅读,修改等,使用这种缩进形式使程序更加直观。例如各个{}的对应,各个函数的位置等等,可以一目了然.很多编辑器还提供对不同变量,保留字的着色.都是为了清晰好看.就像看小说,都有目录,各个章节的题头,每一段开头空两格,这...

C语言中用scanf加循环初始化数组,为什么每个数之间可以用空格隔开?
C语言默认分割符都可以隔开:空格,tab,回车 也可以指定你所要使用的分隔符 如果没有分隔符默认使用空格 两个%d之间什么都没有的话为什么用空格也可以?代码如下:for(i=0;i<=9;i++){scanf("%d",&a[i]); \/\/如果没有分隔符默认使用空格sum=sum+a[i];} ...

C语言输入两个数之间使用空格隔开还是使用逗号隔开
C语言输入两个数之间使用空格隔开还是使用逗号隔开主要取决于你在编写程序时你的scanf语句。具体的区别如下:1、使用scanf("%d,%d",&a,&b);语句进行输入:在输入数据时,两个数据中间需要加“,”,如“500,600”。2、使用scanf("%d%d",&a,&b);语句进行输入:在输入数据时,数据之间不可以用逗...

想问c语言中scanf中输出整数和字符的时候为什么要加个空格?
不加空格的话,当你输入完第二个数字,不论是输入空格还是回车都会读入到变量c中,并不是没有给变量c输入。加空格的目的就是让多输入一个空格用来和输入的第二个数字分割开,然后再输入字符。

为什么C语言中输入要空格
如果输入56,则会当作一个整数:五十六。因此输入两个整数时,其间要用空白字符(如:空格、回车等)隔开,%d能自动跳过这些空白字符。scanf("%d%d", &m, &n);如果两个整数是25和36,则可输入:25 36 如果一定要输入56,把它作为两个1位数字的整数来读取,则应该写 scanf("%1d%1d", &m, &...

c语言里调试之后为什么输入空格行,输入,就不行。
这个取决于你的scanf()函数的格式。如果输入写成scanf("%d,%d",&a,&b),可以看到除了输入两个数字外还要加入逗号才行,所以现在你得加逗号;如果想输入500 600就可以的话,要写成scanf("%d%d",&a,&b);注意把中间的逗号给去掉,此时两个数据之间默认以空格隔开。

C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出
c语言在运行时不进行边界检查,你用scanf加参数%s来输入,它会读一个字符串进去(遇到回车等特殊字符就结束输入,并在最后补'\\0'),至于c是否能容纳这么多,这是由编程者自己来保证c的大小要足够的。所以你的c越界,只能说明是程序错误。这时候正好c[1]后面可以用,所以输出4个字符没有出问题,...

...空格的区别是什么,我发现加了空格程序才能运行,不加就
scanf函数是将输入的数据打到输入缓冲区之后需要按照scanf里的格式进行比对才能取出来~比如scanf("%d %d",&,i,&j)这样的话,你在输入的时候需要加空格:2 3,如果不加空格,这个输入就是不正确的~不会显示正确的数据出来~

相似回答