所以我有一个编译过的 readNumbers 函数,它应该从输入文件中读取数字,还有一个 rbuf 缓冲区,它读取要传输到数组的文件的位。但是,当我给它一个输入时,比如说,12 3 5 6 7 34 11,在将其他所有内容设置为 0 并完成之前,它仅从文件中读取一个字符。
int readNumbers(int **array, char* fname) {
char *errmsg = "Failed to open input file!\n";
char rbuf[16];
int numberRead = 0, numberAllocated = 2, fd;
int temp = 0, i = 0;
int nRead = 0, negative = 1;
int newNumber = 0;
*array = (int *)malloc(numberAllocated * sizeof(int));
fd = open(fname, O_RDONLY, 0);
if (fd == -1){
write(2, errmsg, 31);
return (-1);
}
while ((nRead = read(fd, rbuf, 16)!=0)){
for (i = 0; i < 16; i++){
printf("%d, ", rbuf[i]);
}
printf("\n");
for (i = 0; i < nRead; i++){
printf("A, %d\n", nRead);
if (numberRead == numberAllocated){
numberAllocated *= 2;
*array = (int *)realloc(*array, numberAllocated * sizeof(int));
}
if (rbuf[i] == '-'){
negative = (-1);
}
else if (isdigit(rbuf[i])){
printf("B");
if (newNumber == 0){
printf("C\n");
temp = rbuf[i] - '0';
printf("%d\n", temp);
newNumber = 1;
}
else{
printf("D");
temp *= 10;
temp += (rbuf[i] - '0');
}
}
else{
printf("E");
if (newNumber == 1){
temp *= negative;
*array[i] = temp;
negative = 1;
temp = 0;
newNumber = 0;
numberRead ++;
}
}
}
for (i = 0; i < 16; i++){
rbuf[i] = '\0';
}
}
close(fd);
return numberRead;
}
有什么想法吗?感觉这个问题与read()
和nRead
有关,但我无法弄清楚它是什么。
当前输出为: 49、50、32、51、10、53、32、54、32、55、10、51、52、32、49、49; 一个, 1; 公元前; 1;
事实证明,这个问题很容易解决。
while ((nRead = read(fd, rbuf, 16)!=0)){
所以如果你仔细观察,你会发现这里的括号有问题。正确的格式应该是这样的:
while ((nRead = read(fd, rbuf, 16))!=0){
是的。基本上,它是在将真值分配给用于保存字符数的变量之前检查读取的实际字符数是否不为零。
我是一名优秀的程序员,十分优秀!