【发布时间】:2015-04-03 15:26:48
【问题描述】:
我必须将两个数字相加,而第一个数字不等于 -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代码的方块变成...)。 怎么了?
提前谢谢你
【问题讨论】:
-
你有什么理由不使用像 printf(3) 和 scanf(3) 这样的 glibc 函数吗?您使用
read(2)错误,读取 4 个字节,等于 4 个字符。read(2)读取二进制数据,而不是实际字符。 -
教授说我们必须在unistd.h库中使用read()和write()...
-
哦,好的。除了下面的答案之外,我想说的是,由于您正在使用 linux,请尽量不要将变量名中的第一个字母大写。另一件事是,在
read(2)和write(2)调用中使用STDIN_FILENO代替0 和STDOUT_FILENO代替1。它会更容易阅读。 -
你应该通过标准输入读取数字吗?
-
在这个练习中,我必须通过标准输入读取...在下一个我将不得不从输入文件中读取...