07/09/13 12:33:40
もっといい方法あるのかもしれないけど、こんなんでどうかな
int get_unsigned(unsigned *v)
{
char buf[16];
char *p;
int c;
if (fgets(buf, sizeof buf, stdin) == NULL)
return EOF;
if (strchr(buf, '\n') == NULL)
while ((c = fgetc(stdin)) != '\n' && c != EOF) {}
*v = strtoul(buf, &p, 10);
return *p;
}
int main(void)
{
unsigned val;
int end;
while (printf(">>"), (end = get_unsigned(&val)) != EOF) {
if (end == '\0' || isdigit(end)) printf("W:入力が切り捨てられました.\n");
else if (end != '\n') printf("W:不正文字がありました. '%c'\n", end);
if (val < 1 || 10000 < val) printf("W:入力範囲外です.\n");
printf("<<%u\n", val);
}
return 0;
}
951:945
07/09/13 13:55:57
>>947-950
ありがとうございます。おかげさまで解決しました。
952:デフォルトの名無しさん
07/09/13 14:16:48
scanf("%*[^\n]%*c");なんてできなかったっけ?
953:デフォルトの名無しさん
07/09/13 14:20:57
>>952
それだと、次の文字が\nだと[^\n]にマッチしないので、その時点でひっかかり
読み捨てることが出来ない。
scanf("%*[^\n]"); scanf("%*c");
ならおk
954:デフォルトの名無しさん
07/09/15 02:24:20
うーん勉強になるなあ。ここに書き込みしている人達て通算何年くらい勉強してきたんですか。
俺には凄過ぎっすよ。
955:デフォルトの名無しさん
07/09/15 02:26:09
名プログラマになる為に猛勉強だぜ。
956:デフォルトの名無しさん
07/09/15 09:32:53
ここは知ったかばっかり
957:デフォルトの名無しさん
07/09/17 15:28:45
知ったかな~知ったかな~うにゃうにゃ
はれってほれってひれんら~
958:デフォルトの名無しさん
07/09/17 18:37:19
>>957 迂闊にも笑ってしまいますた
959:デフォルトの名無しさん
07/09/18 17:05:01
SHRT_MIN >= INT_MIN && SHRT_MAX <= INT_MAX 常に成り立つと思うのですが
sizeof(short) <= sizeof(int) は処理系に関係なく成り立ちますか?
960:デフォルトの名無しさん
07/09/18 17:07:56
はい。
961:デフォルトの名無しさん
07/09/18 18:26:29
ANSI C99準拠の標準ライブラリについて、詳しく説明しているサイトありませんか?
素直に本買ったほうがいいでしょうか?
962:デフォルトの名無しさん
07/09/18 18:35:59
っ[JIS X 3010]
963:961
07/09/18 19:21:05
>>962
ありがとう。でも高いねコレ…素直に本買います。
964:デフォルトの名無しさん
07/09/18 20:47:24
つ[URLリンク(www.jisc.go.jp])
965:デフォルトの名無しさん
07/09/19 15:50:54
設計(PAD)でファイルを開いて読み込んでファイルの情報を構造体に格納するのって
どうやるか教えていただけませんか?
966:デフォルトの名無しさん
07/09/19 16:06:49
たぶんCの話じゃないと思うぞ
967:デフォルトの名無しさん
07/09/19 17:28:22
今C言語の勉強をしていて、ファイルの情報を構造体に格納して
それをメモリに展開するってゆーのをやってまして
968:デフォルトの名無しさん
07/09/19 17:30:39
fread
969:デフォルトの名無しさん
07/09/19 17:32:23
そんなもんファイルにどういう形式でデータが記録されていて
格納する構造体はどんなものかによるとしか言えん
970:デフォルトの名無しさん
07/09/19 17:34:00
PADは関係あるのか?
971:デフォルトの名無しさん
07/09/19 17:34:18
JIS X 3010-1993 を読むと
3.4
バイト
実行環境の基本文字集合の任意の要素を保持するために十分な大きさを持つデータ記憶域の単位。
1 バイト中のビット数は,処理系定義とする。
5.2.4.2.1
CHAR_BIT
ビットフィールドでない最小オブジェクト(バイト)におけるビット数
6.3.3.4
sizeof演算子の結果は,そのオペランドの(バイト数での)大きさとする。
sizeof(char) == 1
となっているのですが,ここから char 型オブジェクトのデータ記憶域での大きさは
1 バイトで 1 バイトは CHAR_BIT ビットと判断できるでしょうか?
972:デフォルトの名無しさん
07/09/19 17:36:24
マジっすか。バイト=8bitだと信じてました。
int型が、その処理系で一番速く処理できるビット幅、というのは聞いたことありますが・・・
973:967
07/09/19 17:58:00
今PADの最中なんです。
問題としてはファイルにある社員IDと氏名を構造体に格納し、
メモリに展開するというものです
974:デフォルトの名無しさん
07/09/19 18:06:04
C言語の規格改定って今でも進められているんでしょうか?
975:デフォルトの名無しさん
07/09/19 18:47:35
>>971
そう思って構わないはず。
>>973
常に8ビットを表す単位が必要なら、オクテットを使う。
976:967
07/09/19 19:03:57
文字の長さが2-10で変化するってどゆ意味ですか?
そもそも文字の長さってなんですか?
977:デフォルトの名無しさん
07/09/19 19:09:43
次スレテンプレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
URLリンク(www.kouno.jp)
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
URLリンク(www.amazon.co.jp)
他の過去ログはここに
URLリンク(nssearch.hp.infoseek.co.jp)
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
スレリンク(tech板)
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。
【初心者歓迎】C/C++室 Ver.42【環境依存OK】
スレリンク(tech板)
C/C++の宿題を片付けます 95代目
スレリンク(tech板)
978:デフォルトの名無しさん
07/09/19 19:15:34
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
↓
GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は
何か気になるから変えてくれたら嬉しい
979:デフォルトの名無しさん
07/09/19 19:58:51
>>937
お前前も来たな
帰れ
いや
死ね
980:デフォルトの名無しさん
07/09/19 19:59:21
>>973だった
981:デフォルトの名無しさん
07/09/19 20:22:18
(char *)*char_list->c
という式が表す値は
(char *)型のポインタcが指しているデータ
(char *)型のデータ
のどっちなんでしょうか?
982:デフォルトの名無しさん
07/09/19 20:37:54
演算子の優先順位から、(char *)(*(char_list->c))
983:デフォルトの名無しさん
07/09/19 20:47:49
>>982
その式を見るとカッコ(キャスト)よりも*演算子のほうが優先されている
みたいなんですが、(1+2)*(3*3)のようなカッコとキャストとしてのカッコは
別物として扱われているんでしょうか?
984:デフォルトの名無しさん
07/09/19 20:52:45
そりゃ意味からして別物だろうが
985:デフォルトの名無しさん
07/09/19 20:56:27
ついでに言うと、関数呼出演算子の括弧も別物。
986:デフォルトの名無しさん
07/09/19 21:04:19
>>985
全部一緒くたにして考えてました。orz
最後にもう一つ、
char c = 'a';
char *pc = &c
printf("%d\n", (int)*pc);
予想では上のコードは4バイト分の整数を出力すると思ったのに、
実際にやってみたらa一つ分の97しか出力しませんでした。
これは何故なんでしょうか?
987:デフォルトの名無しさん
07/09/19 21:06:35
何を言ってるんだ、お前は
988:デフォルトの名無しさん
07/09/19 21:07:45
*(int*)pc とでもやりたかったのか?
989:デフォルトの名無しさん
07/09/19 21:09:33
>>986
何が言いたいか分からん。
97は2桁だろ。何が出て欲しいんだか。
990:デフォルトの名無しさん
07/09/19 21:11:57
>>986
charだろうがintだろうが10進数で出力したら97だろ
991:デフォルトの名無しさん
07/09/19 21:13:08
>>986
>4バイト分の整数
この部分を具体例をあげつつ詳細に説明してくれ
992:デフォルトの名無しさん
07/09/19 21:15:21
char c = 'a';
char *pc = &c;
printf("%d\n", sizeof((int)*pc));
4バイト(intの大きさ)分の整数が出力されているってのはあってるぞ
993:デフォルトの名無しさん
07/09/19 21:16:26
>>986
これでどうだ。
printf("%.8X\n", (unsigned int)(unsigned char)*pc);
ここにunsigned intへのキャスト演算子は不要だがサービスしておいた。
994:デフォルトの名無しさん
07/09/19 22:21:24
>>973
PADって構造化フローチャートみたいなやつ?
995:デフォルトの名無しさん
07/09/19 22:24:57
>>994
大学でやった記憶が
996:デフォルトの名無しさん
07/09/20 02:05:03
99というのはISOの年度だからANSI C99というのはおかしくないか
997:デフォルトの名無しさん
07/09/20 02:12:12
おかしいね。
ANSI C89
ISO C90
ISO C95(と言っていいのか)
ISO C99
998:デフォルトの名無しさん
07/09/20 08:33:04
個人的にはC89とかC99の前にANSIとかISOとか付いてる時点でキモい。
まぁキモいだけで、だからどうしようってほどじゃないけど。
999:デフォルトの名無しさん
07/09/20 09:18:44
埋め
1000:デフォルトの名無しさん
07/09/20 09:20:04
梅
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。