0

このコードは基本的に、ユーザーが入力したもの(az)を取得し、モールス信号に変換します。しかし、戻り文字列の最後には常に「m」があり、それを修正するために何百万ものことを試みました。ありがとう、私が間違ったことを確認できます。

//Functions
#include "stdafx.h"
#include <ctype.h>

#include <stdio.h>
#include <string.h>
#include <malloc.h> 
void morse(void);   //prototype
int _tmain(int argc, _TCHAR* argv[])
{
    for(;;){
    morse(); // function call
    }
}

void morse(void){

    char *ss= (char*)malloc(110); // allocating dynamic memory
    strcpy(ss, ".-  -...-.-.-.. .   ..-.--. ......  .----.- .-..--  -.  --- .--.--.-.-. ... -   ..- ...-.-- -..--.----..");
    char *pp =(char*)malloc(110);
    int i = 0;
    int n = 0;
    printf("Enter text to convert to morse code: ");
    scanf("%s", pp);
    char *q =(char*)malloc(110);
    while (*pp != '\0'){//intiate while loop
        *pp = *(pp + n); 
        int f = (*pp - 97)*4; //find letters postion in morse code string
        int a = 0;

        while (a != 4) //copy morse code for the letter into new string
        {
            *(q + i) = *(ss + f);
            i++;
            a++;
            f++;
        }
        n++;

    }
    q[i] = '\0';    
    printf("%s", q); //return morse code
    printf("\n");
    free(ss); //free the allocated memory
    free(pp);
    free(q);
    return;
} 
4

2 に答える 2

2

ループは1文字余分に回ります。外側のループは*ppが\0であることを探しますが、*ppは依然として前の文字の値です。

次のように変更します。

while (*(pp+n) != '\0') {  // test next character
    char c = *(pp + n);    // fetch next character
    int f = (c - 97)*4;    // find character's index into morse array

私がこれを見つけた方法は、デバッガーの下で実行し、何が起こっているかを監視することでした。1文字しか入力していなくても、ループを2回回るとすぐにわかりました。デバッガーを使用してください、それは素晴らしいツールです。動作していると思われる場合でも、デバッガーを介してコードをステップ実行する価値があります。時々あなたは驚きを得る!

于 2012-11-22T02:52:57.843 に答える
2

「n」の値をデバッグして確認します。

あなたはこのようにすることができます:

   while (*pp != '\0'){//intiate while loop
        //*pp = *(pp + n); 
        int f = (*pp - 97)*4; //find letters postion in morse code string
        int a = 0;

        while (a != 4) //copy morse code for the letter into new string
        {
            *(q + i) = *(ss + f);
            i++;
            a++;
            f++;
        }
        //n++;
        pp++;

    }
于 2012-11-22T02:56:25.947 に答える