解答例 7-4

【問1】

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
	int i, j, r;

	for ( i = 0; i < 10; i++ ) {
		r = rand( ) % 80;
		for ( j = 0; j < r; j++ ) {
			putchar( '*' );
		}
		putchar( '\n' );
	}

	return 0;
}

【問2】

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main( void )
{
	char str[128];
	int i, dot=0, err;
	double d;
	long l;

	printf( "数値を入力しなさい" );
	scanf( "%s", str );

	/* 先頭文字の判定 */
	if ( str[0] == '+' || str[0] == '-' || isdigit( str[0] ) != 0 ) {
		err = 0;
	}
	else if ( str[0] == '.' ) {
		err = 0;
		dot++;
	}
	else {
		err = 1;
	}

	/* 2文字目以降の判定 */
	i = 1;
	while ( err == 0 && str[i] != '\0' ) {
		if ( str[i] == '.' ) {
			dot++;
		}
		else if ( isdigit( str[i] ) == 0 ) {
			err++;
		}
		i++;
	}

	/* 上記判定でエラーでない場合 */
	if ( err == 0 ) {
		if ( dot == 0 ) {              /* 整数 */
			l = atol( str );
			printf( "整数値入力 = %ld\n", l );
		}
		else if ( dot == 1 ) {        /* 浮動小数点数 */
			d = atof( str );
			printf( "浮動小数点数入力 = %f\n", d );
		}
		else {                        /* 小数点が複数ある場合 */
			printf( "入力エラー\n" );
		}
	}
	else {
		printf( "入力エラー\n" );
	}

	return 0;
}

戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved