#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *fname ="test.txt";
// 変数名にa,b,c,dとか意味のないものを使用しない。3日後にはワケワカメ。
// 但し[c]は[char]のcなのでおk。
// 型はintだけどfgetcで入力されるのは文字=characterなので一般的にはおk。
// でも、ループカウンタはi,j,k辺りを使うのが慣例っぽい。
// int c,a,b,d;
int c;
// doubleではなくint(charでもおkだけど)。
// double** matrix;
int **matrix;
int candidates_x, votes_y; /* size_x 行 size_y 列 */
int i,j,count=0;
scanf("%d%d", &candidates_x
, &votes_y
); fp
= fopen( fname
, "r" ); if( fp == NULL ){
printf( "%sファイルが開けません\n", fname
); return -1;
}
// intに修正
matrix
= (int**)malloc(sizeof(int*)*candidates_x
); if (matrix
==NULL
) exit(1);
for (i=0 ; i < candidates_x ; i++) {
// intに修正
matrix
[i
] = (int*)malloc(sizeof(int)*votes_y
); if (matrix
[i
]==NULL
) exit(1); }
i = j = 0;
while( (c
= fgetc( fp
)) != EOF
){
if('\n' == c){
i = 0;
j++;
continue;
}
// ここもxとyが逆だった件に併せて修正
// if(j >= votes_y){
if(j >= candidates_x){
break;
}
// ここもxとyが逆だった件に併せて修正
// if(i < candidates_x){
if(i < votes_y){
// x"行"、y"列"だったのか…。
// ファイル上でxが横方向、yが縦方向だと思ってたので間違い。格納場所を修正した。
// ついでに、今回の場合だと、ファイルの数字(文字)を取得して、数値変換してから変数に格納した方が良い。
// 「matrix[j][i]=c;」とするとmatrixには数値の1ではなく数字の'1'(=0x31)が格納されるので、
// 後で比較するときに文字比較になって面倒。
matrix[j][i] = c - '0'; // 必要なら数字以外が入力された場合の対応も書いてね^^;
}
i++;
}
// このループ内もxとyが逆だったので修正した。
for (i=0 ; i < candidates_x ; i++) {
for (j=0 ; j < votes_y ; j++) {
// matrixをint型に修正したので(int)のキャストは不要になった。
// ついでに数値変換して変数に格納しているので文字出力(%c)ではなく数値出力(%d)に変更
}
}
// ループ終了時はj==votes_yになっているので、例えば3x3のときは[0][3]にアクセスしている。
// 配列は0オリジンなのでインデックスは0~2、よって[1][0]へのアクセスと等価なので意図している処理とは違うはず。
// ループを抜けた後の変数を使用するときは終了値に注意ね!
// i=0; a=matrix[i][j];
// ループ内でループカウンタを使用して色々処理するときは、
// ijkじゃなくて分かりやすい(意味のある)変数名にした方が良い。3日後には(ry
{
// 一時的に使用するだけのループカウンタなら、新たにブロックを作って宣言すればいい。
// 後半でちょっとだけ使用するループカウンタをmainの先頭で宣言すると管理が大変。
//(でもこういうソースをほとんど見たことがない。大規模なピュアCだと使ってるのかも?知らんけど^^;)
int currentVote; // 元a。投票数のチェック対象となる投票者番号。
int candidateID; // 元b。投票者番号を回すループカウンタ
int candidateIndex; // 元j。matrixの縦方向走査用カウンタ
// IDは1~、indexは0~。
for(candidateID = 1; candidateID <= candidates_x; candidateID++){
for(candidateIndex = 0; candidateIndex < candidates_x; candidateIndex++){
// とりあえずファイルの左端の列だけ(x=0固定)
currentVote = matrix[candidateIndex][0];
if(currentVote == candidateID){
count++;
}
}
printf("candidates%d=%d\n", candidateID
, count
); count=0;
}
}
for (i=0 ; i < candidates_x ; i++) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBtYWluKCkKewogICAgRklMRSAqZnA7CgljaGFyICpmbmFtZSA9InRlc3QudHh0IjsKCS8vIOWkieaVsOWQjeOBq2EsYixjLGTjgajjgYvmhI/lkbPjga7jgarjgYTjgoLjga7jgpLkvb/nlKjjgZfjgarjgYTjgIIz5pel5b6M44Gr44Gv44Ov44Kx44Ov44Kr44Oh44CCCgkvLyDkvYbjgZdbY13jga9bY2hhcl3jga5j44Gq44Gu44Gn44GK772L44CCCgkvLyDlnovjga9pbnTjgaDjgZHjgalmZ2V0Y+OBp+WFpeWKm+OBleOCjOOCi+OBruOBr+aWh+Wtlz1jaGFyYWN0ZXLjgarjga7jgafkuIDoiKznmoTjgavjga/jgYrvvYvjgIIKCS8vIOOBp+OCguOAgeODq+ODvOODl+OCq+OCpuODs+OCv+OBr2ksaixr6L6644KK44KS5L2/44GG44Gu44GM5oWj5L6L44Gj44G944GE44CCCgkvLyBpbnQgYyxhLGIsZDsKCWludCBjOwoKCS8vIGRvdWJsZeOBp+OBr+OBquOBj2ludO+8iGNoYXLjgafjgoLjgYrvvYvjgaDjgZHjganvvInjgIIKCS8vIGRvdWJsZSoqIG1hdHJpeDsKCWludCAqKm1hdHJpeDsKCWludCBjYW5kaWRhdGVzX3gsIHZvdGVzX3k7IC8qIHNpemVfeCDooYwgc2l6ZV95IOWIlyAqLwoJaW50IGksaixjb3VudD0wOwoKCXByaW50Zigi5YCZ6KOc6ICF5pWw44Go5oqV56Wo6ICF5pWw44KS5YWl5YqbID4iKTsKCXNjYW5mKCIlZCVkIiwgJmNhbmRpZGF0ZXNfeCwgJnZvdGVzX3kpOwoJZnAgPSBmb3BlbiggZm5hbWUsICJyIiApOwoJaWYoIGZwID09IE5VTEwgKXsKCQlwcmludGYoICIlc+ODleOCoeOCpOODq+OBjOmWi+OBkeOBvuOBm+OCk1xuIiwgZm5hbWUgKTsKCQlyZXR1cm4gLTE7Cgl9CgkvLyBpbnTjgavkv67mraMKCW1hdHJpeCA9IChpbnQqKiltYWxsb2Moc2l6ZW9mKGludCopKmNhbmRpZGF0ZXNfeCk7CglpZiAobWF0cml4PT1OVUxMKSBleGl0KDEpOwoKCWZvciAoaT0wIDsgaSA8IGNhbmRpZGF0ZXNfeCA7IGkrKykgewoJCS8vIGludOOBq+S/ruatowoJCW1hdHJpeFtpXSA9IChpbnQqKW1hbGxvYyhzaXplb2YoaW50KSp2b3Rlc195KTsKCQlpZiAobWF0cml4W2ldPT1OVUxMKSBleGl0KDEpOwoJfQoJaSA9IGogPSAwOwoJd2hpbGUoIChjID0gZmdldGMoIGZwICkpICE9IEVPRiApewoKCQlpZignXG4nID09IGMpewoJCQlpID0gMDsKCQkJaisrOwoJCQljb250aW51ZTsKCQl9CgoJCS8vIOOBk+OBk+OCgnjjgah544GM6YCG44Gg44Gj44Gf5Lu244Gr5L2144Gb44Gm5L+u5q2jCgkJLy8gaWYoaiA+PSB2b3Rlc195KXsKCQlpZihqID49IGNhbmRpZGF0ZXNfeCl7CgkJCWJyZWFrOwoJCX0KCgkJLy8g44GT44GT44KCeOOBqHnjgYzpgIbjgaDjgaPjgZ/ku7bjgavkvbXjgZvjgabkv67mraMKCQkvLyBpZihpIDwgY2FuZGlkYXRlc194KXsKCQlpZihpIDwgdm90ZXNfeSl7CgkJCS8vIHgi6KGMIuOAgXki5YiXIuOBoOOBo+OBn+OBruOBi+KApuOAggoJCQkvLyDjg5XjgqHjgqTjg6vkuIrjgad444GM5qiq5pa55ZCR44CBeeOBjOe4puaWueWQkeOBoOOBqOaAneOBo+OBpuOBn+OBruOBp+mWk+mBleOBhOOAguagvOe0jeWgtOaJgOOCkuS/ruato+OBl+OBn+OAggoJCQkvLyDjgaTjgYTjgafjgavjgIHku4rlm57jga7loLTlkIjjgaDjgajjgIHjg5XjgqHjgqTjg6vjga7mlbDlrZfvvIjmloflrZfvvInjgpLlj5blvpfjgZfjgabjgIHmlbDlgKTlpInmj5vjgZfjgabjgYvjgonlpInmlbDjgavmoLzntI3jgZfjgZ/mlrnjgYzoia/jgYTjgIIKCQkJLy8g44CMbWF0cml4W2pdW2ldPWM744CN44Go44GZ44KL44GobWF0cml444Gr44Gv5pWw5YCk44GuMeOBp+OBr+OBquOBj+aVsOWtl+OBricxJyg9MHgzMSnjgYzmoLzntI3jgZXjgozjgovjga7jgafjgIEKCQkJLy8g5b6M44Gn5q+U6LyD44GZ44KL44Go44GN44Gr5paH5a2X5q+U6LyD44Gr44Gq44Gj44Gm6Z2i5YCS44CCCgkJCW1hdHJpeFtqXVtpXSA9IGMgLSAnMCc7CS8vIOW/heimgeOBquOCieaVsOWtl+S7peWkluOBjOWFpeWKm+OBleOCjOOBn+WgtOWQiOOBruWvvuW/nOOCguabuOOBhOOBpuOBrV5eOwoJCX0KCQlpKys7Cgl9CgkvLyDjgZPjga7jg6vjg7zjg5flhoXjgoJ444GoeeOBjOmAhuOBoOOBo+OBn+OBruOBp+S/ruato+OBl+OBn+OAggoJZm9yIChpPTAgOyBpIDwgY2FuZGlkYXRlc194IDsgaSsrKSB7CgkJZm9yIChqPTAgOyBqIDwgdm90ZXNfeSA7IGorKykgewoJCQkvLyBtYXRyaXjjgpJpbnTlnovjgavkv67mraPjgZfjgZ/jga7jgacoaW50KeOBruOCreODo+OCueODiOOBr+S4jeimgeOBq+OBquOBo+OBn+OAggoJCQkvLyDjgaTjgYTjgafjgavmlbDlgKTlpInmj5vjgZfjgablpInmlbDjgavmoLzntI3jgZfjgabjgYTjgovjga7jgafmloflrZflh7rlipsoJWMp44Gn44Gv44Gq44GP5pWw5YCk5Ye65YqbKCVkKeOBq+WkieabtAoJCQlwcmludGYoIiVkICIsbWF0cml4W2ldW2pdKTsKCQl9CgkJcHJpbnRmKCJcbiIpOwoJfQoJLy8g44Or44O844OX57WC5LqG5pmC44Gvaj09dm90ZXNfeeOBq+OBquOBo+OBpuOBhOOCi+OBruOBp+OAgeS+i+OBiOOBsDN4M+OBruOBqOOBjeOBr1swXVszXeOBq+OCouOCr+OCu+OCueOBl+OBpuOBhOOCi+OAggoJLy8g6YWN5YiX44GvMOOCquODquOCuOODs+OBquOBruOBp+OCpOODs+ODh+ODg+OCr+OCueOBrzDvvZ4y44CB44KI44Gj44GmWzFdWzBd44G444Gu44Ki44Kv44K744K544Go562J5L6h44Gq44Gu44Gn5oSP5Zuz44GX44Gm44GE44KL5Yem55CG44Go44Gv6YGV44GG44Gv44Ga44CCCgkvLyDjg6vjg7zjg5fjgpLmipzjgZHjgZ/lvozjga7lpInmlbDjgpLkvb/nlKjjgZnjgovjgajjgY3jga/ntYLkuoblgKTjgavms6jmhI/jga3vvIEKCS8vIGk9MDsJYT1tYXRyaXhbaV1bal07CgoJLy8g44Or44O844OX5YaF44Gn44Or44O844OX44Kr44Km44Oz44K/44KS5L2/55So44GX44Gm6Imy44CF5Yem55CG44GZ44KL44Go44GN44Gv44CBCgkvLyBpamvjgZjjgoPjgarjgY/jgabliIbjgYvjgorjgoTjgZnjgYTvvIjmhI/lkbPjga7jgYLjgovvvInlpInmlbDlkI3jgavjgZfjgZ/mlrnjgYzoia/jgYTjgIIz5pel5b6M44Gr44GvKHJ5Cgl7CgkJLy8g5LiA5pmC55qE44Gr5L2/55So44GZ44KL44Gg44GR44Gu44Or44O844OX44Kr44Km44Oz44K/44Gq44KJ44CB5paw44Gf44Gr44OW44Ot44OD44Kv44KS5L2c44Gj44Gm5a6j6KiA44GZ44KM44Gw44GE44GE44CCCgkJLy8g5b6M5Y2K44Gn44Gh44KH44Gj44Go44Gg44GR5L2/55So44GZ44KL44Or44O844OX44Kr44Km44Oz44K/44KSbWFpbuOBruWFiOmgreOBp+Wuo+iogOOBmeOCi+OBqOeuoeeQhuOBjOWkp+WkieOAggoJCS8v77yI44Gn44KC44GT44GG44GE44GG44K944O844K544KS44G744Go44KT44Gp6KaL44Gf44GT44Go44GM44Gq44GE44CC5aSn6KaP5qih44Gq44OU44Ol44KiQ+OBoOOBqOS9v+OBo+OBpuOCi+OBruOBi+OCgu+8n+efpeOCieOCk+OBkeOBqV5eO++8iQoJCWludCBjdXJyZW50Vm90ZTsJCQkvLyDlhYNh44CC5oqV56Wo5pWw44Gu44OB44Kn44OD44Kv5a++6LGh44Go44Gq44KL5oqV56Wo6ICF55Wq5Y+344CCCgkJaW50IGNhbmRpZGF0ZUlEOwkJCS8vIOWFg2LjgILmipXnpajogIXnlarlj7fjgpLlm57jgZnjg6vjg7zjg5fjgqvjgqbjg7Pjgr8KCQlpbnQgY2FuZGlkYXRlSW5kZXg7CQkJLy8g5YWDauOAgm1hdHJpeOOBrue4puaWueWQkei1sOafu+eUqOOCq+OCpuODs+OCvwoKCQkvLyBJROOBrzHvvZ7jgIFpbmRleOOBrzDvvZ7jgIIKCQlmb3IoY2FuZGlkYXRlSUQgPSAxOyBjYW5kaWRhdGVJRCA8PSBjYW5kaWRhdGVzX3g7IGNhbmRpZGF0ZUlEKyspewoJCQlmb3IoY2FuZGlkYXRlSW5kZXggPSAwOyBjYW5kaWRhdGVJbmRleCA8IGNhbmRpZGF0ZXNfeDsgY2FuZGlkYXRlSW5kZXgrKyl7CgkJCQkvLyDjgajjgorjgYLjgYjjgZrjg5XjgqHjgqTjg6vjga7lt6bnq6/jga7liJfjgaDjgZHvvIh4PTDlm7rlrprvvIkKCQkJCWN1cnJlbnRWb3RlID0gbWF0cml4W2NhbmRpZGF0ZUluZGV4XVswXTsKCQkJCWlmKGN1cnJlbnRWb3RlID09IGNhbmRpZGF0ZUlEKXsKCQkJCQljb3VudCsrOwoJCQkJfQoJCQl9CgkJCXByaW50ZigiY2FuZGlkYXRlcyVkPSVkXG4iLCBjYW5kaWRhdGVJRCwgY291bnQpOwoJCQljb3VudD0wOwoJCX0KCX0KCWZvciAoaT0wIDsgaSA8IGNhbmRpZGF0ZXNfeCA7IGkrKykgewoJCWZyZWUobWF0cml4W2ldKTsKCX0KCWZyZWUobWF0cml4KTsKCWZjbG9zZShmcCk7CglyZXR1cm4gMDsKfQ==