2

文字と配列から始めたばかりです。特定のランダムな文字とランダムでない文字の文字列を生成するコードを書きました。実は、ドミノ・ピザのバーゲンコードを生成することになっています。ええと...

とにかく、これはコードであり、出力がまったくないことに困惑しています。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);

改行を取得します。

一度に 1 文字ずつループして印刷する必要はありません。

于 2012-12-04T16:04:36.547 に答える
1

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

i <= len ということですか?

i=lenでありassignment、代入が成功した場合は true を返します。

それで何が起こるかは

i には 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)

次に、状態を「チェック」すると、実際にはi8にリセットされます

于 2012-12-04T16:03:49.910 に答える