我是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值而不是更多?
非常感谢。 约旦。
答案 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个字符。