我必须将两个数字相加,而第一个数字不等于-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(),打印数字和一个奇怪的字符(一个带有0014代码的正方形...)。 怎么了?
提前谢谢
答案 0 :(得分:0)
我猜你是在Linux或某些POSIX系统上。
read(2)&amp; write(2)系统调用正在读取字节。在现代Linux系统上,终端通常使用UTF-8编码的字符串(如果必须,可以使用libunistring处理)。出于效率原因,您应该(手动)缓冲I / O,即尝试以几千字节(通常为16K字节)的块读取或写入。
显然应该处理字节数(由这些系统调用返回)。不要忘记处理错误情况(例如,通过perror(3)再显示exit(EXIT_FAILURE);
)
您的代码错误,因为sizeof(int)
通常是4,而您对read
的调用可能只读取1,2或3个字节(但通常会读取4个字节) )。你必须处理缓冲,这是练习的一部分。
您可以使用sscanf(3)和snprintf(3)将字符串转换为int
次转化。不要忘记错误案例。