0
// get user's input
int ch = getch();

switch (ch)
    {
        //input a number
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            {

            int i = atoi(ch);

            g.board[g.y][g.x] = i;

            }
}

在我要添加的代码中,ch 被声明为 int。但是,函数 getch 将输入保存为字符串,对吗?如何将字符串 ch 转换为 int 以便我可以使用它?我尝试使用 atoi() 函数,但不断收到这些错误消息。

sudoku.c: In function 'main':
sudoku.c:247:17: error: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Werror]
/usr/include/stdlib.h:148:12: note: expected 'const char *' but argument is of type 'int'
sudoku.c:252:17: error: expected ';' before 'g'
sudoku.c:244:21: error: unused variable 'y' [-Werror=unused-variable]
cc1: all warnings being treated as errors
4

4 回答 4

6

函数 getch 将输入保存为字符串,对吗?

不,getch读取一个字符并返回一个 int (您确实正确定义chint)。将其转换为实整数的最简单方法是减去'0'. 因此,在验证之后getch,您可以将大部分代码替换为:

if (isdigit(ch))
    g.board[g.y][g.x] = ch - '0';
于 2012-07-10T18:01:27.837 回答
3

尝试以下

int i = (int)((char)ch - '0');

数字 0-9 以字符代码的升序排列。因此,从值中减去“0”char将产生一个等于实际数字的偏移量

于 2012-07-10T18:01:46.977 回答
1

atoi需要一个 C 字符串(一个\0/nul 终止的字符串)。在您的示例中,您传递给它一个字符。

相反,利用 ASCII 表格布局的好处:

/* Assuming (ch >= '0' && ch <= '9') */
int value = ch - '0';
/* Borrows from the fact that the characters '0' through '9' are laid
   out sequentially in the ASCII table. Simple subtraction allows you to 
   glean their number value.
 */
于 2012-07-10T18:01:47.020 回答
-1
        int i = atoi(ch);

替换下面的代码

int i = atoi((const char *)&ch);

你可以在手册中找到这个(Linux)

# man atoi

原型是

#include <stdlib.h>

int atoi(const char *nptr);
于 2012-07-10T18:14:17.650 回答