该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
main()
{
char str[11];
int n;
printf("数字を入力(10桁以内) : ");
scanf("%s",str);
printf("%s が入力されました\n",str);
n = atoi(str);
printf("整数に変换し n に代入しました\n");
printf(" n = %d\n",n);
printf("2n = %d\n",n*2);
return;
}
◇実行结果8(123と入力した场合)
数字を入力(10桁以内) : 123
123 が入力されました
整数に変换し n に代入しました
n = 123
2n = 246
これでめでたく数値に変换できました。
・・・ただし、これで终わってはいけません。
<<『例外処理はどうなってるのか?』>>
そう、文字列から変换を行うということは、数字以外の文字が入力された场合
どうなってしまうのかということを考虑しなくてはなりません。
(最终的には数字以外の入力を受け付けないようにすべきですが・・・)
ここでatoi関数がどのような例外処理をするのかを検讨します!
例1:最初に-(マイナス)を入力
数字を入力(10桁以内) : -836
-836 が入力されました
整数に変换し n に代入しました
n = -836
2n = -1672
例2:小数点付
数字を入力(10桁以内) : 1100.23
1100.23 が入力されました
整数に変换し n に代入しました
n = 1100
2n = 2200
例3:数字以外の文字を混ぜる
数字を入力(10桁以内) : 234e4
234e4 が入力されました
整数に変换し n に代入しました
n = 234
2n = 468
例4:先头に+(プラス)记号
数字を入力(10桁以内) : +24
+24 が入力されました
整数に変换し n に代入しました
n = 24
2n = 48
例5:途中に+や-
数字を入力(10桁以内) : 438+45-6
438+45-6 が入力されました
整数に変换し n に代入しました
n = 438
2n = 876
例6:デタラメ
数字を入力(10桁以内) : dspjvci
dspjvci が入力されました
整数に変换し n に代入しました
n = 0
2n = 0
以上実験结果としてatoiは先头は符号あるいは数字、2番目から数字を见て
不正な文字か'\0'までを値に変换していることがわかりました。
9.型変换関数(文字列→倍长整数)
関数名 :atol
必要なヘッダ:stdlib.h
関数のタイプ:long atol (const char *s);
引数 :s 文字列へのポインタ
戻り値 :変换后の数値
前回とほぼ同じで、违いは変换される値がlong型になることです。
◇サンプルプログラム9
#include
#include
main()
{
char str[11];
long n;
printf("数字を入力(10桁以内) : ");
scanf("%s",str);
printf("%s が入力されました\n",str);