出力について(2)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
fight

出力について(2)

#1

投稿記事 by fight » 17年前

以下のソースプログラムに関して質問したいと思っています。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
      char    bin[100];
      char    bin2[100];
      char    *p;
      int     pcnt;
      int     error;
      int     i;
   /* 乱数を初期化する */ 
      srand(time(0));
     /* データを入力する */
     printf("Error Rate (%%) ? "); scanf("%d", &pcnt);  
     while(1) {
            printf("Binary Data ? "); scanf("%s", bin);
            p = bin;
         /* 入力情報をコピーする */
            strcpy(bin2, bin);
            /* 実行の打ち切り */
           if( *p != '0' && *p != '1') break;
           for(i = 1; i <= 100; i++){
                 /*  入力情報を戻す */
                 strcpy(bin, bin2);
                 /*  番地を戻す */
                 p = bin;
                  /*  確率pcnt%でのノイズ混入を実行する */
                 while( *p != '\0' ) {
                        error = (int)rand()%100 < pcnt;
                        if( error ) {
                             if( *p == '0') *p = '1';
                              else         *p = '0';
                       }
                       p++;
                 }
                  printf("%s\n", bin);
           }
     }
     return 0;
}
このプログラムを実行すると、
Error Rate? 0%(入力)
Binary Data? 00000(入力)
00000
00000
・・・
00000
と出力をするのですが・・・この出力を
0 0 0 0 0
0 0 0 0 0 
・・・ 
0 0 0 0 0
としたいと思ってます。しかし先ほど質問して教えていただいた出力に間隔をあける方法が使えません。
この場合は何か間隔をあける方法はあるのでしょうか?
何かアドバイスを下さい。よろしくお願いします。

管理人

Re:出力について(2)

#2

投稿記事 by 管理人 » 17年前

これでどうでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void){
      char    bin[100];
      char    bin2[100];
      char    *p;
      int     pcnt;
      int     error;
      int     i;
   /* 乱数を初期化する */ 
      srand(time(0));
     /* データを入力する */
     printf("Error Rate (%%) ? "); scanf("%d", &pcnt);  
     while(1) {
            printf("Binary Data ? "); scanf("%99s", bin);
            p = bin;
         /* 入力情報をコピーする */
            strcpy(bin2, bin);
            /* 実行の打ち切り */
           if( *p != '0' && *p != '1') break;
           for(i = 1; i <= 100; i++){
                 /*  入力情報を戻す */
                 strcpy(bin, bin2);
                 /*  番地を戻す */
                 p = bin;
                  /*  確率pcnt%でのノイズ混入を実行する */
                 while( *p != '\0' ) {
                        error = (int)rand()%100 < pcnt;
                        if( error ) {
                             if( *p == '0') *p = '1';
                              else         *p = '0';
                       }
                       p++;
                 }
                 p = bin;
                 while( *p != '\0' ){
                     printf("%c ", *p);
                     p++;
                 }
                 printf("\n");           }
     }
     return 0;
}

実行結果

Error Rate (%) ? 50
Binary Data ? 0000000000
0 0 0 0 0 1 1 0 1 0
1 0 0 0 0 1 1 0 1 1
0 0 1 1 0 1 1 1 0 0
0 1 0 1 0 1 0 0 1 0
1 1 0 0 0 0 0 0 0 1
0 0 1 1 1 1 1 1 1 0
0 0 1 1 0 0 0 0 1 0
0 1 0 1 0 0 1 1 1 1
0 1 0 0 1 1 0 1 0 0
1 0 0 1 1 1 1 1 0 1
0 0 0 1 0 1 1 0 1 0

・・(略
 
上で修正していますが、\0が見つかるまで延々とループしているため、
\0が確保した要素100個目までに存在しなかったらまずいことになります。
なので、99文字しか入力できないように、上のように%99sとしておくとよいでしょう。

fight

Re:出力について(2)

#3

投稿記事 by fight » 17年前

>管理人さん 管理人さんのおかげで問題が解決しました。本当にありがとうございました!!

閉鎖

“C言語何でも質問掲示板” へ戻る