gpt4 book ai didi

c - 使用系统调用的初学者编程 SO

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:40 25 4
gpt4 key购买 nike

我必须对两个数字求和,而第一个数字不等于 -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 转换和反向转换。不要忘记错误案例。

关于c - 使用系统调用的初学者编程 SO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com