鱼C论坛

 找回密码
 立即注册
查看: 4067|回复: 23

来看看 感激不尽

[复制链接]
发表于 2013-11-20 21:33:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 轻拿轻放 于 2013-11-22 12:35 编辑

用C语言编程时,我定义了一个数组a[100],现在要将一列长度不知但小于100的序列用函数scanf输入数组,怎么实现?
(弄了一大半天,百度的找不到方法,我的困难时,要不到100的长度之前结束数组的输入怎么弄)
我把程序贴出来
#include<stdio.h>
#include<windows.h>        
void main()
{
        int s[5],i,j=0,tem;
        printf("请输入数(用空格来间隔以#来结束):"); //如,1 2 3 #
        for(i=0;i<5;i++)
                if(tem!='#')        //用tem来存放不需要存放如数组的数,也就是用来存放结束的标志
                   {
                            scanf("%d",&tem);
                                s[i]=tem;
                                j++;        //用j来计算数组的个数
                   }
        else break;            //当输入#是结束循环
        printf("输入的个数为:%d\n",j);
        printf("数组为:\n");   //输出数组
        for(i=0;i<j;i++)
                printf("%d ",s);
        system("pause");
}
[/i]
360截图20131122123434333.jpg [i]我粘贴出来的时候s【i】会消失  附上图算了[/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-20 22:15:28 | 显示全部楼层
#include <stdio.h>

void main()
{
     int n, a[100];
     for( n=0; n<=100; ++n )
{
          scanf("%d",&a[n]);
                  printf("%d\t",a[n]);
}

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-20 22:42:48 | 显示全部楼层
一个循环就能搞定。看看上面这位友人的程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-20 22:57:52 | 显示全部楼层

感谢您 但是 要怎么结束这个 循环呢 ?比如我想在我输入 6个数的时候结束,然后我把这6个数存放到数组中,然后在printf中把这6个数出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-20 22:58:53 | 显示全部楼层
云客联盟 发表于 2013-11-20 22:42
一个循环就能搞定。看看上面这位友人的程序。

感谢您 但是 要怎么结束这个 循环呢 ?比如我想在我输入 6个数的时候结束,然后我把这6个数存放到数组中,然后在printf中把这6个数出来

但是上面的程序根本做不到这一点啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 00:37:04 | 显示全部楼层
精品好帖啦.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 11:58:39 | 显示全部楼层
轻拿轻放 发表于 2013-11-20 22:57
感谢您 但是 要怎么结束这个 循环呢 ?比如我想在我输入 6个数的时候结束,然后我把这6个数存放到数组中, ...

输入六个数后回车不就行了么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 17:19:00 | 显示全部楼层
循环结构  不谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-21 17:43:12 | 显示全部楼层
庸人自忧灬 发表于 2013-11-21 17:19
循环结构  不谢

实现 求实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-21 17:44:15 | 显示全部楼层
18326638710 发表于 2013-11-21 11:58
输入六个数后回车不就行了么。

那要怎么结束呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 17:51:26 | 显示全部楼层
轻拿轻放 发表于 2013-11-21 17:44
那要怎么结束呢

写判断 如果用户输入等于回车退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-21 21:42:49 | 显示全部楼层
n<=100 看这个停止的条件,你要输99次才能停止咯。或者有一种结束程序的方法,Ctrl+Z之后回车。不同的编译器貌似不同,有些是Ctrl+C、Ctrl+X。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 00:45:56 | 显示全部楼层

我把程序贴出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 01:23:20 | 显示全部楼层
本帖最后由 云炀 于 2013-11-22 01:26 编辑

首先,我想问一下,你scanf进去的数字,怎么存进数组的~我是新手一个,反正我看了半天,就一个&tem和s=tem,那么,你将一个int变量赋值给一个指针,本身就会报错。这个问题,请参看沙发,纠正了。而我想说的是,为什么一定要用for循环呢?是强制规定的么?如果不是,请试试用while循环改写可能效果更好

while ( (scanf("%d",&tem) == 1) || ([PC变量,我看你的代码里应该是i] < 100)  )

合理利用库函数的返回值,一方面可以少写很多代码,可读性更好,同时效果也更好,使用while循环可以达到即便不是键入 '#'也可以结束程序的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 12:31:36 | 显示全部楼层
本帖最后由 轻拿轻放 于 2013-11-22 12:32 编辑
云炀 发表于 2013-11-22 01:23
首先,我想问一下,你scanf进去的数字,怎么存进数组的~我是新手一个,反正我看了半天,就一个&tem和s=tem, ...

首先我是先将输入的值付给tem只要tem不等于#就将tem付给s【i】;
然后你的这个循环应该是只能输入1~100的数  上面的程序有两个地方错了  
1.第10行 应该是s[i]=[i]em;
2.第17行是 printf(“%d”,s[i]);
我也不知道怎么会粘贴出来就错了
[/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 12:58:43 | 显示全部楼层

回帖奖励 +1 鱼币

前面看的懂.后面 简直是天文数字!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 13:01:18 | 显示全部楼层
轻拿轻放 发表于 2013-11-22 12:31
首先我是先将输入的值付给tem只要tem不等于#就将tem付给s【i】;
然后你的这个循环应该是只能输入1~100的 ...

大神们.努力加油哦!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-22 22:26:08 | 显示全部楼层
热爱鱼C^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-23 04:33:44 | 显示全部楼层
本帖最后由 云炀 于 2013-11-23 04:38 编辑
轻拿轻放 发表于 2013-11-22 12:31
首先我是先将输入的值付给tem只要tem不等于#就将tem付给s【i】;
然后你的这个循环应该是只能输入1~100的 ...

你是用i作为for循环的结束条件,按照你描述的信息,是要输入最多99个数字,所以按照你给定的条件,i<100就结束循环,在for循环中,你使用了 tem != '#'附加了一个提前结束循环的条件,所以:
# include <stdio.h>

int main(void)
{
        int s[5],i=0,j,tem;

        printf("请输入数(用空格来间隔以#来结束):\n"); //如,1 2 3 #

        while (  (scanf_s("%d",&tem) == 1) && (i < 5) )
        {
                s[i]=tem;
                i++;        //用i来计算数组的个数
        }

        j = i;

        printf("输入的个数为:%d\n",i);
        printf("数组为:\n");   //输出数组
        for( i = 0 ; i < j; i++)
                printf("%d ",s[i]);
        printf("\n");

        return 0;
}
上机试试,NO if, NO else, NO break,即便不使用'#'也可以退出程序,但是我不知道满不满足你的要求,我只是站在了另外一个角度去看这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-23 12:25:50 | 显示全部楼层
不得不说  看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-22 21:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表