[英]trouble reading a 2D array of characters in C?
這是代碼:
#include <stdio.h>
#include <stdlib.h>
void acceptMaze(char maze[ROW][COLOUMN], int nrows, int ncols)
{
int i,j;
for (i = 0; i < nrows; i++)
{
fprintf(stdout,"I = %d",i);
for (j = 0; j < ncols; j++)
{
fprintf(stdout,"J = %d",j);
scanf("%c",&maze[i][j]);
}
}
}
我們在輸入數據時會說i =0 j=0j=1
所以您看到j = 0並沒有保留。我使用的是Linux系統。任何人都可以解決此問題。
您的問題源於%c
轉換說明符不會跳過空格的事實。 如果上一個輸入操作的輸入流中有換行符,則scanf
調用將讀取該換行並將其分配給maze[i][j]
。
這是一種解決方法:
#include <ctype.h>
...
for (i = 0; i < nrows; i++)
{
for (j = 0; i < nrows; j++)
{
int c;
do c = getchar(); while (isspace(c));
maze[i][j] = c;
}
}
這行代碼do c = getchar(); while (isspace(c))
do c = getchar(); while (isspace(c))
將讀取輸入字符,直到您擊中非空白字符為止。
編輯
gh,我才意識到這個方案有一個丑陋的缺點; 如果您想為迷宮分配一個空格字符(如空白),則該命令無法正常工作。 當然,您可以只添加條件表達式:
do c = getchar(); while (isspace(c) && c != ' ');
您需要輸出一些換行符,以使用戶更容易閱讀。 怎么樣:
#include <stdio.h>
#include <stdlib.h>
void acceptMaze(char maze[][],int nrows,int ncols)
{
int i,j;
for(i=0;i<nrows;i++)
{
for(j=0;j<ncols;j++)
{
printf("\nenter %d,%d: ",i, j);
scanf("%c",&maze[i][j]);
}
}
}
回車鍵被接受為您一半查詢的輸入。 假設您提示輸入i = 0,j = 0,然后用戶輸入“ 5”,然后按Enter鍵。 Scanf將'5'插入到maze [0] [0]中,並且在循環的下一個迭代中,它看到enter鍵仍在緩沖區中,因此將其插入到maze [0] [1]中。
您需要在每次scanf之后刷新輸入。 一種解決方案是#include <iostream>
並在每個scanf之后調用std::cin.ignore()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.