作成環境はVisualStudio2010C++です。
問題は以下のとおりです。
[album]793[/album]
[album]794[/album]
今のところのコードは以下のとおりです。
usaoさんのアドバイスを元に修正。
みけCATさんのアドバイスを元に修正。
/* 標準入出力用ヘッダファイルのインクルード */
#include<stdio.h>
/* 警告C4996を出さない */
#pragma warning ( disable : 4996 )
/* プロトタイプ宣言 */
int input();
int save();
int change();
int disp();
/*********************************
機能:data_input中のセットされたビット数を返す
引数:data_input
戻り値:count
備考:
**********************************/
//int count_bits(unsigned long x){
// int count = 0;
// while(x){
// if(x&1U){
// count++;
// }
// x >>= 1;
// }
// return(count);
//}
/*********************************
機能:ビット数を返す
引数:無し
戻り値:count_bits()
備考:
**********************************/
//int int_bits(void){
// return(count_bits(~0U));
//}
/*********************************
機能:ビット内容を表示
引数:data_input
戻り値:無し
備考:
**********************************/
//void print_bits(unsigned long x){
// int i;
// for(i=int_bits()-1;i>=0;i--){
// putchar(((x >> i) & 1U) ? '1' : '0');
// }
//}
/*********************************
機能:data_inputにビット単位でデータを代入していく
引数:data_input,save_count
戻り値:0
備考:
**********************************/
int input(long *data,int *sc){
long data_input;
long tmp;
if(*sc<=10){
printf("データ入力画面です\n");
printf("Yellowの値を0~255までで入力してください:");
scanf("%ld",&tmp);
if((tmp>=0) && (tmp<=255)){
data_input = data_input|tmp;
tmp = 0;
}
else{
printf("0~255までの整数を入力してください!\n");
tmp = 0;
}
printf("\n");
printf("Redの値を0~255までで入力してください:");
scanf("%ld",&tmp);
if((tmp>=0) && tmp<=255){
data_input = data_input|(tmp<<8);
tmp = 0;
}
else{
printf("0~255までの整数を入力してください!\n");
tmp = 0;
}
printf("\n");
printf("Greenの値を0~255までで入力してください:");
scanf("%ld",&tmp);
if(tmp>=0 && tmp<=255){
data_input = data_input|(tmp<<16);
tmp = 0;
}
else{
printf("0~255までの整数を入力してください!\n");
tmp = 0;
}
printf("\n");
printf("Soundの値を0~15までで入力してください:");
scanf("%ld",&tmp);
if(tmp>=0 && tmp<=15){
data_input = data_input|(tmp<<24);
tmp = 0;
}
else{
printf("0~15までの整数を入力してください!\n");
tmp = 0;
}
printf("\n");
printf("繰り返す回数を1~3までで入力してください:");
scanf("%ld",&tmp);
if(tmp>=1 && tmp<=3){
data_input = data_input|(tmp<<30);
tmp = 0;
}
else{
printf("1~3までの整数を入力してください!\n");
tmp = 0;
}
printf("%ld",data_input);
printf("\n");
data[*sc] = data_input;
*sc++;
}
else{
printf("ファイルを保存できる限界を超えました。");
}
return(0);
}
/*********************************
機能:binファイルに保持しているデータを保存する
引数:data_input,save_count
戻り値:0
備考:
**********************************/
int save(long *data,int sc){
int i;
FILE *fp;
fp = fopen("PI.txt","w");
for(i=0;i<sc;i++){
if(fp == NULL){
printf("\aファイルをオープンできません。\n");
}
else{
fprintf(fp,"%ld,",data[i]);
}
}
fclose(fp);
return(0);
}
/*********************************
機能:save()で作成したbinファイルからデータを取り出し、表示出来る形式に変換する
引数:data_tmp,data_disp,ssve_count
戻り値:0
備考:
**********************************/
int change(long *data,long (*data_b)[10],int sc){
int i,j,t;
long l;
long data_tmp;
int Red,Green,Yellow;
int Sound;
int Repeat;
int data_num;
FILE *fp;
fp = fopen("PI.txt","r");
for(i=0;i<sc;i++){
if(fp == NULL){
printf("\aファイルをオープンできません。\n");
}
else{
fscanf(fp,"%ld,",&l);
data_tmp = l;
Yellow = data_tmp & 255;
Red = (data_tmp>>8) & 255;
Green = (data_tmp>>8) & 255;
Sound = (data_tmp>>8) & 15;
Repeat = (data_tmp>>6) & 3;
data_num = i+1;
data_b[14][i] = Repeat;
data_b[0][i] = data_num;
for(j=0;j<Repeat;j++){
t = j * 4;
data_b[t+1][i] = data_num;
data_b[t+2][i] = data_num;
data_b[t+3][i] = data_num;
data_b[t+4][i] = data_num;
}
}
}
fclose(fp);
return(0);
}
/*********************************
機能:change()で変換したデータを表示する
引数:data_tmp,data_disp,save_count
戻り値:0
備考:
**********************************/
int disp(long (*data_b)[10],int sc){
int i,j,r;
for(i=0;i<sc;i++){
r = data_b[13][i];
for(j=0;j<=r*4;j++){
printf("%ld",data_b[j][i]);
}
}
return(0);
}
/*********************************
機能:メニュー選択
引数:無し
戻り値:0
備考:スイッチ文を用いて目的の機能を選択させる
**********************************/
int main(){
char menu = 0;
long data_tmp[10];
long data_disp[14][10];
long data_input[10];
int save_count = 0;
while(1)
{
printf("メニュー\n");
printf("1:データ入力\n2:データ保存\n3:データ変換\n4:データ表示\n");
printf("メニューの数字を選択し、入力してください:");
scanf("%d",&menu);
printf("\n");
switch(menu)
{
case 1 :input(data_input,&save_count);
break;
case 2 :save(data_input,save_count);
break;
case 3 :change(data_tmp,data_disp,save_count);
break;
case 4 :disp(data_disp,save_count);
break;
default :break;
}
}
return(0);
}
直した方が良い点などもありましたらお願いします!
少し長文になってしまいましたがご教授お願いいたします。