-4

我希望你能帮助我。我把所有的东西都写出来并编译了,但我没有得到我想要的答案。

用户输入 1 和 0 的代码,然后我的程序会找到正确的序列,例如...

如果用户输入 1000110,则错误位应为 6,更正后的代码应为 1100110。

我最初使用的是 char,但它在最后一直打印出随机的东西,而不是 1 和 0。

谁能帮我吗?

如果需要,我将进一步解释...

*编辑我添加了我的原始代码。我正在尝试,但没有成功。似乎使用下面的这段代码,用户输入的 1 和 0 并没有被放入数组中,否则它们就不会正确打印......我不知道该怎么做。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

   char *code = NULL;
   int length, parity,slength;
   void param(){
      printf("Enter the maximum length:");
      scanf("%d",&length);
      printf("Enter the parity (0=even, 1=odd):");
      scanf("%d",&parity);
      code = (char*)malloc(length *sizeof(char));
      return;
   }
   void check(){
      int error,p,q=0,j,k,l,u=0,b=0,h,total;
      char *hCode = NULL;
      char *fCode = NULL;
      hCode = (char*)malloc(length *sizeof(char));
        fCode = (char*)malloc(length *sizeof(char));
      printf("Enter the Hamming code:");
      scanf("%lengths",&code);
        slength = strlen(code);
//      printf("%d",&slength);
//      int z;
//      for(z=0;z<slength;z++){
//          printf("%s\n",&code[z]);
//      }
      for (p=slength+1;p>=0;p--){
         hCode[p] = code[q];
         q++;
      }
      for (j=1;j<=log2(length);j*=2){
         int bit;
         for (k=j;k<=length;k+=j*2)
            for (l=0;l<j||k+l<=length;l++){
               if(k+1!=k){
                  bit^=hCode[k+l];
                  fCode[k+1] = hCode[k+1];
               }
                 fCode[j] = bit;
            }
      }
      for (u=1;u<=slength+1;u++){
         if (hCode[u]!=fCode[u]){
            error = u;
                b=u;
            printf("There is an error in bit: %d\n",error);
         }
        }
            if (b==0)
                printf("There is no bit error\n");
            b=0;
      printf("The corrected Hamming code is: ");
      for (h=slength;h>0;h--){
         printf("%c",&fCode[h]);
      }
        printf("\n");
       return;
   }

   int main(){
      int choice;
      while (choice !=3){
         printf("\n");
         printf(" Error detection/correction:\n");
         printf("------------------------------\n");
         printf("1) Enter parameters\n");
         printf("2) Check Hamming code\n");
         printf("3) Exit\n");
         printf("\nEnter selection: ");
         scanf("%d",&choice);
         printf("\n");
         if (choice == 1)
            param();
         else if (choice == 2)
            check();            
         else{ 
            printf("\n");
            printf("Goodbye. Have a nice day");
         }
      }
      return 1;
   }    
4

2 回答 2

2

scanf("%lengthd",code);不会将数组读入code; 它甚至不是有效的scanf语法。您应该循环读取字符:

for (p=0;p<length;p++){
    code[p] = getc() - '0';
}

PS 还有一些其他的问题。例如,sizeof(code)/sizeof(int)不获取数组的大小,而是只获取sizeof(int*)/sizeof(int). 你可能只是想要length

于 2012-10-24T06:22:40.333 回答
0

第一个错误是这样的:

 for (p=(sizeof(code)/sizeof(int))+1;p>=0;p--)

code 是 INT * 类型,通常为 4 个字节长,当然取决于您的系统。但无论如何,该表达式的计算结果是 4/4 = 1,我怀疑这不是你想要的。我怀疑你应该使用你的长度变量。

IE

for (p=0; p < length; p++)
于 2012-10-24T06:25:57.650 回答