// 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
答案 0 :(得分:6)
函数getch将输入保存为字符串,对吗?
不,getch
读取一个字符并返回一个int(您确实将ch
正确定义为int
)。将其转换为实数的最简单方法是减去'0'
。因此,在验证getch
之后,您可以使用以下代码替换大部分代码:
if (isdigit(ch))
g.board[g.y][g.x] = ch - '0';
答案 1 :(得分:3)
尝试以下
int i = (int)((char)ch - '0');
数字0-9按字符代码的升序排列。因此,从char
值中减去“0”将产生一个等于实际有问题的数字的偏移量
答案 2 :(得分: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.
*/
答案 3 :(得分:-1)
int i = atoi(ch);
替换下面的代码
int i = atoi((const char *)&ch);
你可以通过手册(Linux)找到它
# man atoi
原型是
#include <stdlib.h>
int atoi(const char *nptr);