![](/img/trans.png)
[英]How do I create a table using inputs from a user, the amount of which changes depending on a previously specified input from the user?
[英]How do I get keyboard inputs from the user using C and linux?
我必須編寫一個簡短的程序,創建兩個子進程,每個子進程從鍵盤接受 integer 並將它們寫入 pipe,父進程從中匯總它們並在屏幕上顯示總數。
我用 scanf() 寫了一個,但它凍結了,它沒有給我總和。 如果可能的話,如何使其與 scanf 或任何其他方式一起使用?
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int pipe(int pd[2]);
int main(int argc, char *argv[])
{
int pd[2], sum=0, num=0;
if(pipe(pd) == -1)
for(int i = 0; i < 2; i++)
{
if(fork() == 0)
{
scanf("%d", num);
if(write(pd[1], &num, sizeof(int)) == -1)
printf("Error: Write()");
}
}
for(int j = 0; j < 2; j++)
{
wait(NULL);
if(read(pd[0], &num, sizeof(int)) == -1)
printf("Error: Read()");
sum += num;
}
printf("Total: %d\n", sum);
}
這里有很多問題:
if(pipe(pd) == -1)
,我假設你打算有一個錯誤處理程序作為它的“then”子句,但你沒有,所以只有在 pipe 失敗時才會產生孩子,這基本上與您想要的相反。scanf("%d", num);
. 您需要&num
因為num
還不是指針。return
或exit
,否則它們將進入下一個循環並消耗 output。只需修復這些東西,就足以讓它工作:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int pipe(int pd[2]);
int main(int argc, char *argv[])
{
int pd[2], sum=0, num=0;
if(pipe(pd) == -1)
{
perror("pipe");
return 1;
}
for(int i = 0; i < 2; i++)
{
if(fork() == 0)
{
scanf("%d", &num);
if(write(pd[1], &num, sizeof(int)) == -1)
printf("Error: Write()");
return 0;
}
}
for(int j = 0; j < 2; j++)
{
wait(NULL);
if(read(pd[0], &num, sizeof(int)) == -1)
printf("Error: Read()");
sum += num;
}
printf("Total: %d\n", sum);
}
還有一些其他的事情你也應該解決,但它們並不是完全的阻礙。 這就是我的想法:
pipe
原型。 unistd.h 中的那個很好。fork
或scanf
失敗的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.