簡體   English   中英

在C中讀取二維字符數組時遇到麻煩?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM