我在矩阵上输入信息时遇到了一些问题
我想构建一个简单的单词搜索游戏。用户将矩阵的维度告诉单词搜索并输入字符,我想打印它只是为了看看信息是否一切正常。
这是我的代码:
void main (){
int nl, nc, i,j;
scanf ("%d %d", &nl,&nc); //Input number of lines and collums of the matrix
char matrix [nl] [nc];
for (i=0;i<nl;i++)
for (j=0;j<nc;j++)
scanf("%c",&matrix[i][j]); //Input matrix
printf("This is your matrix:\n");
for (i = 0; i < nl; i++)
for (j = 0; j < nc; j++)
printf("%c", matrix [i][j]);
}
如果我输入类似的内容
2 3
ABC
DEF
输出应该是:
This is your Matrix:
ABC
DEF
但是我打印时的输出类似于
This is your Matrix:
ABC
D
它首先给出一个“\n”,然后打印但不完整。
我做错了什么?请考虑到我应该只使用 scanf 和 getchar 等函数来构建矩阵。
最佳答案
OP:“我做错了什么?”
答: scanf("%c", ..
正在读取上一个 scanf ("%d%d"...
要避免该空格和其他空格,请通过在 "%c"
格式中预先添加 ' '
来使用它们。
1) 检查 scanf()
结果。
2) 在"%c"
之前使用空格来消耗空格,特别是上一行的\n
。
3) 正确使用main()
。
4) 简单打印字符串时最好使用 fputs() 或 puts()
编辑:满足输入短线的能力
#include<stdio.h>
#include<stdlib.h>
void ConsumeToEOL(void) {
int ch;
do {
ch = getchar();
} while (ch != '\n' && ch != EOF);
}
int main() {
int nl, nc, i, j;
// Space between "%d %d" not really needed
if (scanf("%d%d", &nl, &nc) != 2) {
fputs("Bad number Input\n", stdout);
exit(1);
}
ConsumeToEOL();
char matrix[nl][nc];
for (i = 0; i < nl; i++) {
for (j = 0; j < nc; j++) {
int ch = getchar();
if (ch == '\n' || ch == EOF)
break;
matrix[i][j] = (char) ch;
}
if (j == nc) ConsumeToEOL();
for (; j < nc; j++) {
matrix[i][j] = 0;
}
}
// Better to use fputs() or puts() when simply printing a string
fputs("This is your matrix:\n", stdout);
for (i = 0; i < nl; i++) {
for (j = 0; j < nc; j++) {
if (matrix[i][j]) {
printf("%c", matrix[i][j]);
}
}
// Add EOL
fputs("\n", stdout);
}
return 0;
}
关于c - C 中的 Char 矩阵 - 使用 Scanf 或 getchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23087070/