2014-10-30 17 views
-3

这是我的代码摘录。它读取一个文件并将第一行放入一个char,然后将第一行的一部分放入一个int。该文件的第一行是“10 20”。该文件稍后会关闭。我打印temp时的输出是10 20,但是当我打印rct时,它是49,cct是32.我对c完全陌生,并不知道为什么这是错误的。为什么我的C程序显示的不是int应该是

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]; 
+2

请发布一个MCVE,而不是一些代码不能用来诊断错误。 – Deduplicator 2014-10-30 14:13:17

+2

从我的答案'摘录':你可以通过解决这个问题。 。 。 。 。 。 – 2014-10-30 14:16:21

回答

4

您试图将字符串转换为整数,这是您无法通过赋值完成的。你实际上做的是打印字符串中第一个和第三个字符的字符代码(49是ASCII为'1',32位ASCII为' ')。相反,您应该使用fscanf为您解析。

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 

目前,您指定一个字符rctcct,他们得到的各个字符的ASCII值。请记住'0' != 0,因为'0'在ASCII表中的值为48。查看更多的值ASCII table here

+0

工作,谢谢 – Lennygames 2014-10-30 14:20:05

相关问题