我是C语言的初学者。在阅读了Ritchie的书的最初章节后,我写了一个程序来生成随机数字和字母。
程序用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;
}
答案 0 :(得分:4)
printf("%s ,",text);
是错误的 - 它表示text
是一个以空值终止的字符数组。使用
printf("%c ,", text);
而不是打印你的单个字符。
答案 1 :(得分: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;
}
这就是我所要说的。 :)
答案 2 :(得分:1)
为什么在%s
为text
时使用char
。你不需要函数中的字符串类型。只是一个char会做。功能更改:void randAlph ()
printf("%s ,",text);
到
printf("%c ,", text);