意外输出(C字符串和字符)

时间:2012-12-04 16:00:39

标签: c

我刚开始使用字符和数组。我写了一些代码来生成一些随机和非随机字符串。嗯,实际上它应该为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 个答案:

答案 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=lenassignment,如果赋值成功,则返回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