0

私はC言語の初心者です。リッチーの本の最初の章を読んだ後、私は乱数とアルファベットを生成するプログラムを書きました。

プログラムはgccで正常にコンパイルされます。ただし、実行すると、「セグメンテーション違反」というエラーが発生します。これは、私の限られた知識では理解できません。私が間違って書いたことを理解できてうれしいです。

#include <stdio.h>
#include <stdlib.h> 
#include "conio.h"
#include <time.h>


long int genrandom(int,int);
void randAlph(void);
char letterize(int);

int main (void) {
//     char full[9];
//     char part_non[4];  
    srand(time(0));        

    int i;
    for (i=0;i<50;++i) {
      randAlph();
    };

}

long int genrandom(int mino,int maxo) {
    int val=mino+rand()/(RAND_MAX/(maxo-mino)+1);
    return val;  
}

void randAlph (){
  int val;
  char text;
val=genrandom(0,26);
//  return val;
text=letterize(val);
printf("%s ,",text);

}

char letterize(int num) {
  char letter='A'+num;
  return letter;
}
4

3 に答える 3

4

printf("%s ,",text);間違っています-それはtext文字のヌル終了配列であると言います。使用する

printf("%c ,", text);

代わりに、単一の文字を印刷します。

于 2012-12-04T13:35:24.393 に答える
2
#include <stdio.h>
#include <stdlib.h> 
#include "conio.h"
#include <time.h>


int genrandom(int,int);
void randAlph(void);
char letterize(int);

int main (void) {
//     char full[9];
//     char part_non[4];  
    srand(time(0));        

    int i;
    for (i=0;i<50;++i) {
      randAlph();
    };

}

int genrandom(int mino,int maxo) {//changed function return type to int
    int val=mino+rand()/(RAND_MAX/(maxo-mino)+1); //Be careful when you are using '/' operator with integers
    return val;  //returning int here why set return type to long int?
}

void randAlph (){
  int val;
  char text;
  val=genrandom(0,26);
  //  return val;
  text=letterize(val);
  printf("%c ,",text);//Replace %s with %c

}

char letterize(int num) { //No bound checking on num eh?
  char letter='A'+num;
  return letter;
}

それが私が言わなければならなかったすべてです。:)

于 2012-12-04T14:23:57.853 に答える
1

なぜ使用%sするtextのかchar。関数に文字列型は必要ありません。ただの文字で十分です。機能の変更:void randAlph ()

printf("%s ,",text);

printf("%c ,", text);
于 2012-12-04T13:44:14.523 に答える