2

我只是从字符和数组开始。我写了一些代码来生成一个由某些随机和非随机字符组成的字符串。嗯,实际上它应该为 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;
}
4

4 回答 4

5
for (i=0;(i=len);i++)

应该

for (i=0;i<=len;i++)
于 2012-12-04T16:02:36.620 回答
2

由于您遇到了 0 终止数组的麻烦,因此只需使用以下命令打印它:

puts(word);

或者

printf("%s\n", word);

获取换行符。

无需循环自己并一次打印一个字符。

于 2012-12-04T16:04:36.547 回答
1

for (i=0;(i=len);i++)

你是说 i <= len吗?

i=len是一个assignment,如果赋值成功则返回true。

所以会发生什么

我被分配了 len 的值,(这是成功的)因此返回 true。

因此 for 循环条件得到满足。

你需要的是

           for (i=0;i<=len;i++)
于 2012-12-04T16:02:14.660 回答
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

于 2012-12-04T16:03:49.910 回答