用网格格式化C ++中的输入

时间:2017-03-20 22:07:27

标签: c++ arrays multidimensional-array format

处理2D数组Sudoku程序,我希望用户输入用空格分隔,而不是逐行输入每个输入。这会让用户更容易看到他们输入任何想法的内容?希望它是由9行而不是逐行的9个数字。当前代码:

int main()

{

int grid[N][N];

//Input

    std::cout << "Enter a Sudoku puzzle:" << std::endl;
    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++)
            std::cin >> grid[i][j];


std::cout << "Sodoku Puzzle: \n";
printSodoku(grid);
std::cout << "\n Solution: \n";

if (SolveSudoku(grid) == true)
    printSodoku(grid);
else
    printf("No solution exists");
_getch();
return 0;
}

2 个答案:

答案 0 :(得分:3)

您当前的代码允许,因为cin占用任何空格之前的内容,将其输出到您的代码中,并等待另一个cin并输出下一个内容。因此,无需任何修改,您的程序应该能够做到这一点。

答案 1 :(得分:0)

您可以使用getline捕获cin流直到换行并迭代包含的值,指定空格作为分隔符。您需要自己处理网格的索引,因为循环将在输入上而不是

std::string value;
int i = 0;
int j = 0;
while(std::getline(std::cin, value, " ")){

    grid[i][j] = atoi(value.c_string());
    if(j == 9){
        i++;
        j = 0;
    }
    else {
        j++;
    }
}

这假设表现良好的输入(所有81个条目在同一行上的顺序正确并且由空格分隔),并且该行中的所有值都可以转换为int。如果情况并非如此,那么您需要添加额外的代码来检查while循环中的这些情况。