アルゴリズムとプログラミングについて勉強しています。
課題は 一行に一つの非負の整数値があるものを正しいとし、
それ以外のものを誤りとします。正しい行はその行にある整数値を左詰めでstdoutに表示し、誤った行はそのままstderrに表示します。
例えば
<入力>
6
1 aout 78
a
4 9
12
<stdout>
6
12
<stderr>
1 aout 78
a
4 9
のような感じです。
整数が一行に入っているかの判定は、配列の中身を
空白いくつか 数字いくつか 空白いくつか \n \0
を前提として
左を0番目としてはじめて
数字の初めをstart番目、2回めの空白の初めをend番目としています。
startやendは思った値が出ているようなのですが、
うまく判定ができていないようなので、よろしくお願いします。
#include<stdio.h>
#include<ctype.h>
#define SIZE 100
int main(void){
char buf[SIZE]; int start,end,i,j; //整数値の始まりと終わり、変数用意 while(fgets(buf,SIZE,stdin)!=NULL){ start=0; while(buf[start]==' '){start++;} //空白ならstartをすすめる start=end; //こんどはendを進めたいので値をセット while(isdigit(buf[end])!=0){end++;} //整数値ならendを進める i=end; while(buf[i]==' '){i++;} //空白ならiを進める if(buf[i]=='\n' && start!=end){ //正しい時(空白数字空白のあとに改行来るor数字がある) for(j=start;j<end;j++){ printf("%d",buf[j]); //startからend未満までの数値を出力 } printf("\n"); }else{ //誤りの時は fputs(buf,stderr); //errorにそのまま出力 printf("\n"); } } return 0;
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。