【问题标题】:How to read numbers from stdin until end如何从标准输入读取数字直到结束
【发布时间】:2015-02-25 23:28:43
【问题描述】:

哪里有for(;;) 我需要从标准输入读取一些内容并保存到Nread(stdin,N,sizeof(float))while(s!=EOF) s=getc(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);
}

【问题讨论】:

  • 我很困惑。你的问题到底是什么?看起来你已经想通了一切。你的scanf 电话有问题吗?我唯一的建议是在您的每个 printf 调用中添加换行符 (\n)。
  • 程序在他们的检查器上显示“超出墙时间限制”。那么,当它是 EOF(标准输入)时,我怎样才能打破“for”循环?

标签: c unix stdin


【解决方案1】:

检查scanf的返回值。它返回成功匹配的项目数,所以如果它不返回 1,那么你就完成了。

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

【讨论】:

  • 也许while (scanf("%d", &amp;N) !=EOF) 更好?
  • 这是否也一样:while( feof(stdin)!=EOF) (scanf("%d", &amp;N); ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多