我刚开始使用字符和数组。我写了一些代码来生成一些随机和非随机字符串。嗯,实际上它应该为Dominos披萨生成廉价代码。恩...
无论如何,这是代码,我对任何输出都没有感到困惑。我用gcc -Wall编译,没有警告或错误。所以很明显,它是关于字符串的一些基本结构方面。
我很感激有关此事的任何见解。
代码:
#include <stdio.h>
#include <stdlib.h>
#include "conio.h"
#include <time.h>
int genrandom(int,int);
char randAlph(void);
char letterize(int);
char randDigit(void);
char digitize(int);
void weaver(void);
void prtall(char[],int);
int main (void) {
srand(time(0));
weaver();
return 0;
}
void weaver(void) {
//BG5C?---1
char word[10];
word[0]='B';
word[1]='G';
word[2]='5';
word[3]='C';
word[4]=randDigit();
word[5]=randAlph();
word[6]=randAlph();
word[7]=randAlph();
word[8]='\0';
prtall(word,8);
}
void prtall(char worder[],int len){
int i;
for (i=0;(i=len);i++) {
if ( worder[i] != '\0' ){
printf("%c",worder[i]);
}
}
printf("\n");
}
int genrandom(int mino,int maxo) {
int val=mino+rand()/(RAND_MAX/(maxo-mino)+1);
return val;
}
char randAlph (void){
int val;
char text;
val=genrandom(0,26);
text=letterize(val);
return text;
}
char randDigit () {
int val;
char text;
val=genrandom(0,9);
text=digitize(val);
return text;
}
char letterize(int num) {
char letter='A'+num;
return letter;
}
char digitize(int num) {
char digit='0'+num;
return digit;
}
答案 0 :(得分:5)
for (i=0;(i=len);i++)
应该是
for (i=0;i<=len;i++)
答案 1 :(得分:2)
由于您无法通过0终止数组,只需使用以下命令打印:
puts(word);
或
printf("%s\n", word);
获取换行。
无需循环自己并一次打印一个字符。
答案 2 :(得分:1)
for (i=0;(i=len);i++)
您的意思是我&lt; = len ?
i=len
是assignment
,如果赋值成功,则返回true。
所以会发生什么
我被赋予了len的值,(这是成功的)因此返回true。
因此,循环条件得到满足。
您需要的是
for (i=0;i<=len;i++)
答案 3 :(得分:1)
你陷入无限循环,问题在于for
语句:
for (i=0;(i=len);i++) {
您需要i<=len
,而不是i=len
。你的for循环现在正在做:
i = 0, i = 8
if '\0' != '\0'
i++ (i = 9)
然后,当它“检查”条件时,它实际上只是将i
重置为8