C中的Char Matrix问题

时间:2016-06-13 17:05:39

标签: c matrix printing char

我是C的初学者,目前我正在遇到一些麻烦。 我在尝试在char矩阵中输入值然后打印它时遇到问题。

这是我的代码:

#include <stdio.h>
#define N 3

int main( )
{

char arr[N][N]={{0}};
int i,j;

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        scanf("%c",&arr[i][j]);
    }
}

for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        printf("%c",arr[i][j]);
    }
}

return 0;
}

输出结尾有两个字符丢失。

我不知道我做错了什么,我想理解我的错误:

- 这是涉及scanf功能的某种问题吗?我之前听说过缓冲区,那有关系吗?问题来自我按下回车的那一刻吗?

- 我以错误的方式初始化我的矩阵?

- 在这种情况下使用getchar()会更好吗?如果是这样,我怎样才能设法准确输入N * N值而不是更多?

非常感谢。 约旦。

3 个答案:

答案 0 :(得分:5)

您应该使用" %c"接受char作为输入。当您在"%c"之前添加空格时,它会消耗white-spaces(换行符,制表符,空格等)与之前的输入一起输入。

#include <stdio.h>
#define N 3

int main() {

    char arr[N][N]={{0}};
    int i,j;

    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            scanf(" %c",&arr[i][j]);
            //     ^ --- the space before %c
        }
    }

    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            printf("%c ",arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

<强>输入:

a b c d e f g h i

您也可以使用 Enter Return 按钮逐个输入这些字符。

<强>输出:

a b c 
d e f 
g h i 

您还可以查看解决同一问题的this帖子。

答案 1 :(得分:1)

另一种方法。添加getchar(); scanf()语句后的语句。

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Dealer = sequelize.define('Dealer', {
    id:         { allowNull: false, autoIncrement: true,
                  primaryKey: true, type: DataTypes.INTEGER.UNSIGNED },
    ...
    created_at: { allowNull: false, type: DataTypes.DATE },
    updated_at: { allowNull: false, type: DataTypes.DATE }
  },
  {
    underscored: true,
    classMethods: {
      associate: function(models) {
        Dealer.hasMany(models.Job);
      }
    },
    instanceMethods: {
      getAllClientData: function(){
        leads = [];
        ...
        return leads;
      },
    }
  });
  return Dealer;
};

getchar()将消耗新行。

答案 2 :(得分:1)

在这种情况下,只需按顺序输入9个字符,而无需按按钮,如

123456789\n  

因为在每个字符之后放一个换行符存储在一个字符索引中,因为\n是一个字符本身肯定你不想像这样输入

1\n2\n3\n4\n5\

在上述情况下,故意从用户处取5个字符。