| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2377 人关注过本帖
标题:问一个数组的问题
只看楼主 加入收藏
a861268448
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2014-9-15
结帖率:66.67%
收藏
 问题点数:0 回复次数:12 
问一个数组的问题
例如,我想用一个数组p来装输入的数字123(输入的时候就是输入123 ,不是输入1 2 3 这种有空格的)
其中p[0]=1   p[1]=2   p[3]=3
这种效果可以实现吗?该怎么写呢
2015-03-12 14:01
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
如果你把数组定义为整型的,那是不能实现的,你想:我正在用scanf()把从键盘上输入的数赋值给a【0】,我只输入12,难道scanf就这么善解人意,懂我的意思,把1赋值给a【0】,然后把2赋值给下一个???那如果我的意思是吧12赋值给a【0】呢???
所以,我们必须要在输入的时候,输入特定的字符,让scanf知道,读取结束了。
利用scanf的读取特点:scanf读取 int型时不接受空白符,(读取字符串也是)比如【space】【tab】【enter】,因为他要读取的是一个整数,所以他会跳过这些空白字符,
所以,我们就可以用空白字符来作为输入的数据的分隔线。
如过,真要你说的那样的话,就只能把p数组定义为字符型

、、、、、、、、、、、、、、、、、、、、、
# include <stdio.h>
int main(void)
{
    char p[3];
    int i;
    for(i=0;i<3;i++)
     scanf(" %c",&p[i]);
     
    for(i=0;i<3;i++)
     printf("%c\n",p[i]);
   
   
   
    return 0;
}

你醒了?快起来敲代码!!
2015-03-12 15:23
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#define N 100

int main(void) {
    int a[100] = {0}, *p = a;

    while(p <= &a[N - 1] && (scanf("%1d", p)) == 1)
        printf("%d ", *p++);

    puts("");
    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2015-03-12 15:26
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
再来个完善点的

程序代码:
#include <stdio.h>
#include <ctype.h>
#define N 10

int main(void) {
    int ch, a[N] = {0}, *p = a;


    while((ch = getchar()) != '\n' &&
            isdigit(ch) && p <= &a[N - 1])
        printf("%d ", *p++ = ch - 48);

    puts("");
    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2015-03-12 15:34
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
我孤陋寡闻了。。。

你醒了?快起来敲代码!!
2015-03-12 15:36
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
2位数就不行了

你醒了?快起来敲代码!!
2015-03-12 15:38
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
突然想起还有一种方法
# include <stdio.h>
int main(void)
{
    int a[3];
    int i;
    for(i=0;i<3;i++)
     scanf("%1d",&a[i]);
     
    for(i=0;i<3;i++)
     printf("%d\n",a[i]);
   
   
   
    return 0;
}

你醒了?快起来敲代码!!
2015-03-12 15:40
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 6楼 code力力
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define N 5

int main(void) {
    int a[N] = {0}, *p = a;
    char s[3] = {0}, *end;


    while(scanf("%2[0-9]", s) == 1 && p <= &a[N - 1])
        printf("%d ", *p++ = strtol(s, &end, 10));

    puts("");
    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2015-03-12 15:54
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
回复 8楼 longwu9t
受教了

你醒了?快起来敲代码!!
2015-03-12 16:37
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
再补充一个

程序代码:
#include <stdio.h>

int main(void) {
    char str[11] = {0}, *p = str;
    int i = 0, a[5] = {0};

    while(scanf("%10[0-9]", str) != 1)
        while(getchar() != '\n');

    while(i < 5) {
        sscanf(p, "%2d", a + i++);
        p += 2;
    }

    for(i = 0; i < 5; i++)
        printf("%d ", a[i]);

    puts("");
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-03-12 16:59
快速回复:问一个数组的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018869 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved