这是我的代码的摘录。它读取一个文件并将第一行放入char
,然后将第一行的一部分放入int中。该文件的第一行是" 10 20"。该文件稍后会关闭。我打印temp时的输出是10 20,但是当我打印rct时它是49并且cct是32.我是c的新手并且不知道为什么这是错误的。
FILE *matrix;
char *temporary = argv[5];
matrix = fopen(temporary,"r");
if (matrix == NULL)
{
perror(argv[5]);
exit(1);
}
int rct, cct;
char temp[10];
fgets (temp, 10, matrix);
rct = temp[0];
cct = temp[2];
答案 0 :(得分:4)
您正在尝试将字符串转换为整数,这是您无法通过赋值完成的。您实际要做的是打印字符串中第一个和第三个字符的字符代码(49为'1'
的ASCII,' '
的32个ASCII)。相反,您应该使用fscanf
为您进行解析。
答案 1 :(得分:2)
您需要sscanf
从字符串中提取整数。所以使用:
sscanf(temp,"%d %d",&rct,&cct);
最好检查sscanf
是否成功。因此,请执行以下操作以检查sscanf
的返回值为@chux建议:
if(sscanf(temp,"%d %d",&rct,&cct)==2)
//sscanf is successfull
else
//sscanf failed
目前,您将一个字符分配给rct
和cct
,并获取相应字符的ASCII值。请记住'0' != 0
,因为'0'
在ASCII表中的值为48。查看ASCII table here