| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3676 人关注过本帖
标题:二维数组输入字符的问题,有人帮忙看看嘛,
只看楼主 加入收藏
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:15 
二维数组输入字符的问题,有人帮忙看看嘛,
自己定义行和列,不行吗,,为什么输出不了

#include<stdio.h>
     
  void main()
{    char a[100][100],b[100];
    int i,j,t=0;
    printf("输入  m  n\n");
    scanf("%d%d",&m,&n);
    printf("输入字符\n");
    for (i=0;i<=m-1;i++)
        for (j=0;j<=n-1;j++)
            scanf("%c",&a[i][j]);
    printf("输入的数组为\n");
    for (i=0;i<=m;i++)
    {
        for (j=0;j<=n;j++)
        {   
            printf("%c",a[i][j]);
        }
    printf("\n");
    }
}
搜索更多相关主题的帖子: include 
2013-11-19 16:43
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
你的输入会把空隔等所有字符都包含进去的.
要有判断语句, 是字母才保存到数组.
程序代码:
#include <ctype.h>               //  增加这个头文件



for (i = 0; i < m; i++)
        for (j = 0; j < n; ) {
            c = getchar();
            if (isalpha(c)){          // 如果读取的是字母才保存到数组, 其它字符都不操作.
                a[i][j] = c;
                j++;
            }
        }



还有, 你那个 b 数组太小了.a有10000个元素, b才能保存100个.

[ 本帖最后由 pangshch 于 2013-11-19 16:54 编辑 ]
2013-11-19 16:50
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 2楼 pangshch
  for (i=0;i<=m-1;i++)
        for (j=0;j<=n-1;j++)
            if(ch>'a'&&ch<'z'&&ch>'A'&&ch<'Z')
          scanf("%c",&a[i][j]);

只是字母,这样可以吗。

啊这个是不行的,还有其他的办法吗。

[ 本帖最后由 hxx4137 于 2013-11-19 16:57 编辑 ]
2013-11-19 16:53
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 2楼 pangshch
,那个函数 我们没有学习, 可不可以加上一些判断语句来判断呢 像我上面那样 或者其他的差不多的语句
2013-11-19 16:55
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
回复 3楼 hxx4137
for (i=0;i<=m-1;i++)
        for (j=0;j<=n-1;)
             scanf("%c",&ch);
            if((ch>'a'&&ch<'z') || (ch>'A'&&ch<'Z')){
                 a[i][j] = ch;
                  j++;
   }
你要先输入, 再判断, 再保存.
你的代码不合逻辑.

j++ 要放在保存字符之后,
没有保存, j的值就不变.
         

[ 本帖最后由 pangshch 于 2013-11-19 17:02 编辑 ]
2013-11-19 16:57
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
回复 4楼 hxx4137
那就用我给你改的那个也可以,
你的思路是对的, 只是逻辑判断上有点错误,
2013-11-19 17:00
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 5楼 pangshch
你好,我这个作业题目是要求,
 编写一个函数fun,功能是讲M行N列的二维数组按列的顺序依次放在一个字符串中,并输出到屏幕上。
 例如 w w w w
      s s s s
      h h h h
输出得wshwshwsh
  思路还没有  只能想到先得到数组 , 后面你能给我大体说一下吗.
2013-11-19 17:01
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:20 
回复 7楼 hxx4137
我看到你的贴子我就知道你和那谁 "可怜的C人" 是同学, 他比你先问了.
程序代码:
程序代码:
#include <stdio.h>

#define M 100    // 数组的最大行数
#define N 100    // 数组的最大列数

void fun(char *b, char a[][N], int m, int n)
{
    int i, j;

    for (j = 0; j < n; ++j)
        for (i = 0; i < m; ++i)      
            *b++ = a[i][j];
}

int main()
{
    char a[M][N];           // 二维数组
    char b[M*N];            // 一维数组
    int c;
    int i, j;
    int m, n;

    printf("请输入数组的行数: ");
    scanf("%d", &m);
    printf("请输入数组的列数: ");
    scanf("%d", &n);
  
    // 输入字符
    printf("请输入 %d个字符:\n", m * n);
    for (i = 0; i < m; i++)
        for (j = 0; j < n; ) {
            c = getchar();
            if ((c <= 'z'&&c>='a') || (c <= 'Z'&& c >= 'A')){          // 如果读取的是字母才保存到数组, 其它字符都不操作.
                a[i][j] = c;
                j++;
            }
        }

    printf("输入的二维数组为:\n");       // 打印二维数组
    for (i = 0; i < m; i++) {
        for (j = 0; j < m; j++)
            putchar(a[i][j]);
        putchar('\n');
    }

    fun(b, a, m, n);                   // 数组转换

    printf("转换为一维数组为:\n");     // 打印一维数组
    for (i = 0; i < m*n; i++)
        putchar(b[i]);
    putchar('\n');
    return 0;
}






[ 本帖最后由 pangshch 于 2013-11-19 17:09 编辑 ]
2013-11-19 17:06
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 8楼 pangshch
谢谢你了,我们才上到指针的概念。
  原来可以用指针返回数组值。
我细细研究下,十分感谢
2013-11-19 17:12
hxx4137
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 8楼 pangshch
// 输入字符
    printf("请输入 %d个字符:\n", m * n);
    for (i = 0; i < m; i++)
        for (j = 0; j < n; ) {
            c = getchar();
            if ((c <= 'z'&&c>='a') || (c <= 'Z'&& c >= 'A')){          // 如果读取的是字母才保存到数组, 其它字符都不操作.
                a[i][j] = c;
                j++;
            }
        }


  请问 这个j++放在这个位置是为什么呢,为什么放在for (j = 0; j < n; ) 运行之后会出错.
2013-11-19 17:16
快速回复:二维数组输入字符的问题,有人帮忙看看嘛,
数据加载中...
 
   



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

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