配列
int cnt[]の[]内の部分の番号をあらわす数字ってchar型ですか?int型ですか?
cnt['0'],cnt['1']となってるんですが、char型でしょうか?
printf("%d",cnt[i]);ともなってるのでint型でもどっちでもいいのでしょうか?
[]の中は整数数値、基本はint型(処理系依存かもしれん)。
'0'は整数数値、で'0'の基本はint型の整数(処理系依存かもしれん)。
int型配列だから全部int型
>>804 インデックスの型と配列の型は関係ない。
pointer[index]は*(pointer + index)の糖衣構文。
pointerが何かのポインターである限り、それに加え得るのは整数型のみ。
また、文字'0'は整数型。
いずれにしても、asciiと互換性のある文字セットならcnt['0']は*(cnt + 48)の糖衣構文だ。
>>803 じゃぁcnt[1]もcnt['1']も一緒なんですね。
後、cnt[str[i]-'0']ってプログラムの部分であるんですが
なんで-'0'とかあるんですか?0引いても[]の中関係なくないですか?
char型の1からchar型の0引くとint型の1が出てくるって理屈かな
>>807 >じゃぁcnt[1]もcnt['1']も一緒なんですね。
一緒じゃない。
'1'のほうは'1'の文字コードが入る。
>>807 >>806 でも同じこと言ってるけど一応マジレスしておくと
'0' っていうのは文字リテラルという表記方法で整数0とは違うの
その処理系の文字コードがASCIIなら'0'==0x30、即ちcnt['0']==cnt[0x30]なわけ
Are you OK?
Yes, I am Okada Katsuya.
NO, You are ? Okada Katsuya.
>>807 若いなぁ、その問い詰めかた。
君のニキビだらけの顔が目に浮かぶよ。
あと、この場合はもっと丁寧に
「配列の添え字には、何型を使えば良いですか?」
と質問すべきだったね。
そうすれば、
「size_t というものがあってだな・・・」
みたいな回答が貰えたのに。
きも
>>808 いや、一瞬そう思いましたが、[]内はchar型で計算してるんだから、
charにあたる数字が出てくるんじゃないですか?
うーん良く分からん、main内での数え上げでは[]内はintで処理してたのに
どういうことなんだろ。気にしなくてもいいんですけどね。
まぁでも機械が読み取りしてくれる処理としては添え字として
読み取ってくれるなら別に[]内はintでもdoubleでもcharでもいいような気はしますね。
その概念からするとchar[]配列に代入するとき
char[]='0'じゃなくてもchar[]=0でもいい気がしませんか?
'1'-'1'=0
だろ〜
じゃー
'1'-'0'=1
になるんじゃね〜
>>815 > char型で計算してるんだから、
> charにあたる数字が出てくるんじゃないですか?
Cのcharは文字じゃなくてサイズの小さい整数型だから。
つーか、文字定数はintだってば
>>816 なにを主張したいんだか判らんヤッちゃな
もしかして a['0'] == a[0] が望みか?
ならC言語なんか使わずにJavaScriptにしろ
まず、'0'〜'9'は連続していることが規格で保証されている
次にstr[]がchar型の配列なら{cnt[str[i]-'0']}は{cnt[char型-int型]}なので
暗黙的に型変換が起こり{cnt[((int)char型)-int型]}となる
結果、str[i]が'0'〜'9'の範囲内で、差し引くint型が文字定数の'0'であれば
その差として、int型の0〜9が得られるので、{cnt[n(0<=n<=9)]}となる
822 :
デフォルトの名無しさん:2011/03/07(月) 08:07:25.55
int cenk;
cenk='A'
printf("%d",cenk);
出力は65と出るのですが、'A'はchar型なのにintに代入できるんですか?
またcharとintは型の種類、サイズが違うから、char型の65と、int型の65
は違うものですか?
824 :
デフォルトの名無しさん:2011/03/07(月) 08:23:04.12
826 :
デフォルトの名無しさん:2011/03/07(月) 08:34:12.88
#include<stdio.h>
int main(void)
{int cenk; cenk='A'; pirntf("%d",cenk);
return (0);}
エラーなしです
828 :
デフォルトの名無しさん:2011/03/07(月) 08:42:12.61
よくunsigned xとかあるのですが、これはint型なのかchar型かよく分かりません。
なんですか?
暇人による壮大な釣りジャマイカ
831 :
デフォルトの名無しさん:2011/03/07(月) 08:47:20.47
832 :
デフォルトの名無しさん:2011/03/07(月) 08:52:59.12
配列の場合scanf("%s",run[i]);といった感じで&を省略できるのは何故ですか?
また&run[i]としたらだめなのですか?
run[i]の型次第
つーか、いい加減ウザイ
834 :
デフォルトの名無しさん:2011/03/07(月) 09:03:39.41
>>833 intの場合
&run[i]はダメですか?
決まりごと多いですよねぇ。
>>834 条件次第では&run[i]は動くかもよ
まぁ、想定している動作とは違うかもしれんが
run[i]も動くかもしれんが、キャストしなくても有効なのか…?
まぁ、そこら辺の細かい規定までは知らんな…
837 :
デフォルトの名無しさん:2011/03/07(月) 09:13:10.17
scanf()は色々罠があるからお勧めしないが、判って使うなら止めない。
せめて、fgets()+sscanf()を利用した方がましではある。
それでも回避できない罠。
・バッファオーバランの恐れ
%sは生で使わずできるだけ%99sのようにサイズを指定した方がいい。
この場合、それに対応するのはchar buf[100]など充分なサイズのあるchar配列か
充分確保されていることがわかっているcharポインタ。
・型チェックの曖昧さ
通常の関数呼び出しでエラーになるような引き数を渡してもエラーにならないケースが多い。
従って、型の管理は自分でしっかりやる必要がある。
ポインタを理解できていないなら、scanf()系は使うべきではない。
>>837 おまいさんが考えてることとは違うと思うがこんな感じだ
#include <stdio.h>
int main() {
char s[20];
int x[20];
x[0] = (int) s;
scanf( "%s", x[0] ); // 明示的にキャストしなくても合法なのか?
scanf( "%s", &x[1] ); // 多分思惑とは違う動作
printf( "%s\n%s\n", (char *)x[0], (char *)&x[1] ); // 入力内容表示
return 0;
}
840 :
デフォルトの名無しさん:2011/03/07(月) 09:34:23.32
C言語を極めるとどうなりますか?
2chを見なくなります
どのプログラミング言語もC言語と同じ様に関数呼び出しするとスタックに引数と戻りアドレスが格納されて関数終了時にその戻りアドレスで呼び出し元に戻るって処理方法なんですか?
ほとんどはそうです
Thx
847 :
デフォルトの名無しさん:2011/03/07(月) 17:51:30.98
関数やスタックって概念や用語が登場しない言語とか
再帰が基本的にできなくて相当する処理を作るのが大変な言語とか
普通にあるぞ
>>847 言語の表面上、
>関数やスタックって概念や用語が登場しない言語とか
有るが内部的には使ってるだろ
アセンブラのCALLは関数なのか?
と言えば「はい」とでも「いいえ」とでも言えそうだし、
そもそも、ジャンプで代用できるし(代用したものは関数ではないのか?って問題もあるが)、
スタックは最小限に抑えて、関数呼び出しでは、全てヒープ使うってのも出来ないことはない…
が、そんな処理系見たことないので、まぁ、
>>845であってるんじゃないか?
850 :
デフォルトの名無しさん:2011/03/07(月) 18:31:31.91
ガチでスタックがなくて
一般にスタックがよく使われる用途までヒープだけなシステムや
それに由来する仕様の言語知らない?
> 代用したものは関数ではないのか?
クラスや多態がない言語でもやってることは同じだったりね
>>850 インタプリタなら分かるが、それも含んだ話?
それとも、インタプリタ以外で有名なのってある?
StacklessPythonとかの詰まらんオチに1票
>>848 847が言ってるのは、
Brainfuckみたいな理論寄り言語のことでしょ
854 :
デフォルトの名無しさん:2011/03/07(月) 19:46:52.83
NTLの使い方なんですが、ZZ型とchar型の配列に交互に変換する
関数が解りません。どうしたら変換できますか?ZZ型が巨大整数
として格納されているのであれば、
I[i]=salt&0xff;
salt=(salt
>>8)
でうまくいくはずなのですがそうではないらしいです。
内部のことはよくわからないので知っている人がいたら教えてください。
よろしくお願いします。
>>854 使ったことないから分からんけど、
シフト演算子がないのであれば、salt=(salt/256);で良いのでは?
856 :
デフォルトの名無しさん:2011/03/07(月) 19:58:36.07
シフト演算子はあるのですが、salt&0xffが型が違うと言われます。
cannnot convert NTL::ZZ to char in assignment
>>856 んじゃ、一旦、絶対値に修正
I[i]=salt%256; // 元の値が負であれば反転+1の処理追加
salt=(salt
>>8);
でどうだ?
>>856 しゃーないから調べてみた
to_ZZ とか to_long とかで相互変換できるみたい
Iの型がおかしいんじゃね?
860 :
デフォルトの名無しさん:2011/03/07(月) 20:12:21.93
出来ました!ありがとうございます。
まだ今度は読み込みの分があるのでそれで解らなくなったら聞くので
よろしくお願いします。
ああなるほど&が使えないってことか
862 :
デフォルトの名無しさん:2011/03/07(月) 20:16:48.83
マージソートとクイックソートの違いが良く分かりません、教えてください。
はやっ!!もう戻ってきたΣ(´∀`;)
>>862 その質問は下記と同じようなもの
もっと、意図をしぼって質問すれ
windowsとlinuxの違いが良く分かりません、教えてください。
>>862 漠然とした質問には漠然としか応えられない
まず要素をばらばらにして、
それをくっつけながら並べ替えていくのがマージソート
要素全体を、大きいのと小さいのに
2分割する操作を繰り返すのがクイックソート
クイックソートって名前には勝てないな
マージソートがどんなに速くてもクイックじゃないからな
867 :
デフォルトの名無しさん:2011/03/07(月) 21:34:18.57
open(ARGF.filename + ".ecc") {|file|
while l = file.gets
l=l.to_i
ls=@I[ii]
ii=ii+1
lines += 1
fields += l.to_s.split(',').size
l^=(@P_y%(2**8*ls))
for i in 0..31
salt[i]=0
end
while(l>0)
i=0
while(i<ls)
salt[i]=l&0xff
salt[i]=sprintf("%c",salt[i])
l=(l
>>8)
i=i+1
end
end
i=ls-1
while(i>-1)
g.write(salt[i])
i=i-1
end
end
これをCで書くとどうなりますか?教えてください。よろしくお願いします。
元の言語が分からんので、他の奴に任せる
パイソンとかルビーとかこんな感じだったような
pythonだったらインデントが潰れてる時点でout
それRubyだよ。でも知らないから教えられない、残念!
int main(void)
{
system("echo open(ARGF.filename + (略) end > tmp.rb");
system("ruby tmp.rb");
return 0;
}
873 :
デフォルトの名無しさん:2011/03/07(月) 23:09:22.38
まえにいついてた暗号の人と同じ人かな。
[]の人はどれも同じ人に見えるなw
877 :
デフォルトの名無しさん:2011/03/08(火) 01:08:12.96
>>875 俺は大学生なんで、高度な質問はできませんよ。
ちなみに
現実では分かる事をあえて質問し優越感にひたり、ネットでは、
本当に分からない事を相手の羞恥心がむき出しになる程問い詰める。
というのがモットーです。
今年もよろしくお願いします。
このスレ怖い、さらばじゃ
∧∧
ダッシュ!(;`д)
と つ
〜(_つ
ε=ε= し′
879 :
デフォルトの名無しさん:2011/03/08(火) 01:20:39.14
880 :
デフォルトの名無しさん:2011/03/08(火) 02:45:20.51
NTLという演算ライブラリの中にあるZZ型について質問です。
ZZで作った巨大整数を、char型の配列にする場合はどのようにすれば
いいのでしょうか?
ZZ salt;
char buf[32];
for(i=0;i<32;i++){
buf[i]=salt%256;
salt=(salt
>>8);
}
このように変換しようとしましたが、出来ませんでした。
整数ではなく文字が入っていました。どうすればいいのか解りません。
教えてください。よろしくお願いします。
881 :
デフォルトの名無しさん:2011/03/08(火) 08:06:06.86
getchar()の使い方が良く分かりません。
ch=getchar();となってる場合どういうことでしょうか?
getchar()の戻り値がchに入る。
883 :
デフォルトの名無しさん:2011/03/08(火) 08:56:44.52
>>882 getchar()に123(int)を入力したい時はどうするんですか?
プログラムではgetchar()に何かを入れることは、できません。
標準入力からは、たった一文字しか取ってきません。
文字列を入力したいのなら、fgets()でも使いましょう。
その文字列を数値として解釈したいのなら、atoi(), strtol(), strtod(), sscanf()等を使いましょう。
Cの勉強したいのですが何からはじめればいいでしょう
本の少しかじった程度はできます。
じゃあまずその本を少しかじった程度でやめるのではなくて熟読してマスターするといいんじゃないかな
電卓でも作ってろカス
>>844 引数をスタックに積むのはレジスタが少ないCPU向けだな。
レジスタが豊富なCPUはスタックに積まずに直接
レジスタに入れて渡すケースが多い。
>>889 は?
呼び出し規約なんて呼び出し元と呼び出し先で
整合性とれればなんでもいいんだが。
本を読んで電卓とオセロ作ることにします ありがとう
893 :
デフォルトの名無しさん:2011/03/08(火) 15:08:04.24
数字の0って、NULLって書いてもいいですか?
ダメです
100 -> 1NULLNULL
896 :
デフォルトの名無しさん:2011/03/08(火) 16:54:18.95
>>896 printf("月=");
while( (scanf( "%d",&m ) != 1) && ((m < 1) || (m > 12)) );
{
printf("1〜12の間で入力してください。\n");
}
こんな感じ?
&& じゃなくて || だね。
while( (scanf( "%d",&m ) != 1) || ((m < 1) || (m > 12)) );
Objective-Cの初心者はここでええのん???