有for(;;)
的地方我需要从stdin读取内容并保存到N
。
可能有read(stdin,N,sizeof(float))
和while(s!=EOF)
s=getc(stdin)
的内容? 我假设数字列表保存在stdin分隔的行尾
问题是:
您的程序必须将其pid打印到标准输出。然后它应该开始从标准输入读取N的值直到文件的结尾。在接收到一个信号(SIGUSR1)后,你的程序应该从sum(sum = 0的第一个值)中减去(然后乘以,然后除,然后减去)N的值作为一个循环。收到SIGUSR2后,您的程序应打印当前总和。
我如何解释问题和尝试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
float N,sum=0;
int count=0;
void handler(int s){
count++;
if (s==SIGUSR1){
if (count==1){
sum-=N;
}
if (count==2){
sum*=N;
}
if (count==3){
sum/=N;
}
if (count==4){
sum+=N;
count==0;
}
}
else if (s==SIGUSR2){
printf("sum=%d",sum);
}
}
int main(){
pid_t pid=getpid();
signal(SIGUSR1,handler);
signal(SIGUSR2,handler);
printf("%d",pid);
fflush(stdout);
for(;;)
scanf("%d",&N);
return(0);
}
答案 0 :(得分:1)
检查scanf
的返回值。它会返回成功匹配的项目数,因此如果它没有返回1,那么您就完成了。
while (scanf("%d", &N) == 1)
;