新手:将getch()的输入转换为int

时间:2012-07-10 17:59:26

标签: c

// 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 个答案:

答案 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);