C语言的一个输入问题
例如SampleInput35715第一个3表示输入的数的个数,5715总共是三个数。但是如何让3与5715在同一行输入啊?不知道我这么说能说明白么就是说如果我用scan...
例如
Sample Input
3 5 7 15
第一个 3 表示输入的数的个数 ,5 7 15总共是三个数。
但是如何让 3与 5 7 15在同一行输入啊?
不知道我这么说能说明白么
就是说 如果我用
scanf("%d",&n);
for(i;i<n;i++)
scanf("%d",&a[i]);的话 先输入一个数再敲下回车就不满足要求了。。。 展开
Sample Input
3 5 7 15
第一个 3 表示输入的数的个数 ,5 7 15总共是三个数。
但是如何让 3与 5 7 15在同一行输入啊?
不知道我这么说能说明白么
就是说 如果我用
scanf("%d",&n);
for(i;i<n;i++)
scanf("%d",&a[i]);的话 先输入一个数再敲下回车就不满足要求了。。。 展开
4个回答
展开全部
可以的。scanf 到输入缓冲区 去依次取数。无论你的数 放在一行,还是分成多行,都没关系。
例如:
3 5 7 15
或
3 5
7
15
都没关系。
===============
也可以用动态数组,第一个数为 n, 后面读 n 个数:
#include <stdio.h>
int main()
{
int i,n;
int *a;
scanf("%d",&n);
a = (int*) malloc(n*sizeof(int));
for (i=0;i<n;i++)scanf("%d",&a[i]);
for (i=0;i<n;i++)printf("%d ",a[i]);
}
============
for(i;i<n;i++) -- for(i=0;i<n;i++) // =0 不要省。
例如:
3 5 7 15
或
3 5
7
15
都没关系。
===============
也可以用动态数组,第一个数为 n, 后面读 n 个数:
#include <stdio.h>
int main()
{
int i,n;
int *a;
scanf("%d",&n);
a = (int*) malloc(n*sizeof(int));
for (i=0;i<n;i++)scanf("%d",&a[i]);
for (i=0;i<n;i++)printf("%d ",a[i]);
}
============
for(i;i<n;i++) -- for(i=0;i<n;i++) // =0 不要省。
展开全部
就这样输入,用空格隔开,最后按回车不就行了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
赞观察力。 比那些张口要代码的人好多了:)
当然其他人回答的都正确,语法这样规定的,但是为什么要这么规定呢?相信scanf()漏掉&的人非常多吧。
我认为主要原因是实现的方便。
需要注意的地方是 scanf和printf的根本区别在于scanf需要改变参数的直,而print不需要改变参数。
因为scanf需要改变变量的值,而c语言的参数都是通过pass by value,函数内部得到的是变量的copy
比如如下函数
void set_zero(int x)
{
x=0;
}
执行后不会把x设为0, 因为函数内部只对copy进行了操作。
为了能够操作实际变量,c语言需要使用指针
void set_zero(int *px)
{
*px=0;
}
就可以改变x所指对象的值。
调用时的语法为
int x=3;
set_zero(&x);
//这里x就是0了
scanf也是类似的。同样的也可以解释为什么
char* string;
scanf("%s",string) 的string不需要&号,也因为string本身就是指针。
反过来看printf, printf不需要改变他的参数,而只需要参数的value。 于是printf不见接受指针,传来的指针在printf看来和一般的unsigned int没有区别, 于是直接打出对应的int value, 也就是地址了
ps:
在c语言中由于没有引用(reference)的机制,scanf只好使用这样不友好的语法(个人认为)。c++中引入了引用的概念。于是
cin就不需要取地址了。
当然其他人回答的都正确,语法这样规定的,但是为什么要这么规定呢?相信scanf()漏掉&的人非常多吧。
我认为主要原因是实现的方便。
需要注意的地方是 scanf和printf的根本区别在于scanf需要改变参数的直,而print不需要改变参数。
因为scanf需要改变变量的值,而c语言的参数都是通过pass by value,函数内部得到的是变量的copy
比如如下函数
void set_zero(int x)
{
x=0;
}
执行后不会把x设为0, 因为函数内部只对copy进行了操作。
为了能够操作实际变量,c语言需要使用指针
void set_zero(int *px)
{
*px=0;
}
就可以改变x所指对象的值。
调用时的语法为
int x=3;
set_zero(&x);
//这里x就是0了
scanf也是类似的。同样的也可以解释为什么
char* string;
scanf("%s",string) 的string不需要&号,也因为string本身就是指针。
反过来看printf, printf不需要改变他的参数,而只需要参数的value。 于是printf不见接受指针,传来的指针在printf看来和一般的unsigned int没有区别, 于是直接打出对应的int value, 也就是地址了
ps:
在c语言中由于没有引用(reference)的机制,scanf只好使用这样不友好的语法(个人认为)。c++中引入了引用的概念。于是
cin就不需要取地址了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样就可以吧?整形输入的时候空格和回车是同等效力的吧,你输入第一个空格后第一个数就读进去了,然后再循环读后面的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询