我必须对两个数字求和,而第一个数字不等于 -1,而且数字只有一个数字。我必须使用 read() 和 write()。
#include <unistd.h>
#include <errno.h>
int main()
{ int Somma;
int One;
int Two;
do
{ write(1, "\nFirst Number: ", 15);
if(read(0, &One, sizeof(int)) == -1)
perror("Error First Read");
if(One != -1)
{ write(1, "Second Number: ", 15);
if(read(0, &Two, sizeof(int)) == -1)
perror("Error Second Read");
Somma = One + Two;
Somma -= 48;
write(1, "Sum: ", 5);
if(write(1, &Somma, sizeof(int)) == -1)
perror("Error Write");
}
}while(One != -1);
return 0;
}
现在,我遇到了一些问题。首先,当 One 等于 -1 时,程序继续进入 if 语句......第二个是最后一个write(),打印出数字和一个奇怪的字符(一个方 block 用0014编码成...)。怎么了?
提前致谢
我猜你在 Linux 或一些 POSIX 系统上。
read(2) & write(2)系统调用正在读取字节。在现代 Linux 系统上,终端通常使用 UTF-8编码字符串(如果需要,您可以使用 libunistring 处理)。出于效率原因,您应该(手动)缓冲 I/O,即尝试读取或写入几千字节(通常为 16 字节)的 block 。
您显然应该处理字节数(由这些系统调用返回)。不要忘记处理错误情况(例如,通过使用 perror(3) 显示它们,然后 exit(EXIT_FAILURE);
)
您的代码是错误的,因为 sizeof(int)
通常为 4,而您对 read
的调用可能只读取 1、2 或 3 个字节(但通常情况下,它会读取 4 个字节)。您必须处理缓冲,这是练习的一部分。
你可以使用 sscanf(3)和 snprintf(3)使字符串到 int
转换和反向转换。不要忘记错误案例。
我是一名优秀的程序员,十分优秀!