我在文件中有一个标题行代表我想要阅读的矩阵,例如
R4 C4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
我想要做的是在这种情况下阅读'4'的第一行。但这些数字可以是任意长度(在某种程度上)。经过一番搜索,我发现atoi()可以做到这一点(也许):
int main ()
{
FILE * pFile;
FILE * pFile2;
pFile = fopen ("A.txt","r");
pFile2 = fopen ("B.txt","r");
char c;
int lincount = 0;
int rows;
int columns;
if (pFile == NULL) perror ("Error opening file");
else{
while ((c = fgetc(pFile)) != '\n')
{
if(c == 'R'){
c = fgetc(pFile);
rows = atoi(c);
}
if(c == 'C'){
c = fgetc(pFile);
columns = atoi(c);
break;
}
}
lincount++;
printf("Rows is %d and Columns is %d\n", rows, columns);
}
我在编译时遇到的错误是
warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast
[enabled by default]
/usr/include/stdlib.h:148:12: note: expected ‘const char *’ but argument is of type
‘char’
我不明白atoi()如何工作或如何解决这个问题,文档对我没有帮助,因为我从实例中不明白我已经找到了atoi()的输入可能是什么一个指针,因为它们似乎只是在示例中输入字符。
答案 0 :(得分:0)
首先,atoi
将char *
作为参数。而且你提供的是char
。
正如你所说,数字可以是可变长度的。因此,如果您在代码的下面部分进行一些更改会更好。
相反
if(c == 'R'){
c = fgetc(pFile);
rows = atoi(c);
}
if(c == 'C'){
c = fgetc(pFile);
columns = atoi(c);
break;
}
将其更改为
int row;
int column;
if(c == 'R'){
fscanf(pFile, "%d", &row);
//rows = atoi(c); <----No need of atoi
}
if(c == 'C'){
fscanf(pFile, "%d", &column);
//columns = atoi(c); <----No need of atoi
break;
}