如何从stdin读取数字直到结束

时间:2015-02-25 23:28:43

标签: c unix stdin

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);
}

1 个答案:

答案 0 :(得分:1)

检查scanf的返回值。它会返回成功匹配的项目数,因此如果它没有返回1,那么您就完成了。

while (scanf("%d", &N) == 1)
    ;