0

再び、私は自分自身が比較的道に迷い、仲間から知識を求めていることに気づきました。私がする必要があるのは、子音の後に文字「u」「t」を追加して英語に出力するエンコードされた言語を取り込むプログラムを作成することです。したがって、入力した Hutelutluto は hello として出力されます。最初は理解できたと思っていましたが、教授は最初の入力を文字配列に格納して表示する必要があると言いました。次に、その文字配列を使用して、変更された翻訳を出力します。

私はいくつかの異なる角度を試しました.1つは、変更パラメーターに合わせて読み取り文字列関数を変更しようとしました。それは常にめちゃくちゃになってしまい、予期しない出力が得られます。

基本的に、文字配列を while ループに入れるには助けが必要だと思いますが、試してみると、整数エラーとのポインター比較があるというエラーが表示されます。

これが私のコードの私の版で、問題の解決に最も近いと信じています。現時点では、while は readstring 関数とは独立して機能します。私は問題を考えすぎていると確信していますが、ねじれを解決する方法がわかりません。:

/*

Tut language
By: Steven

*/

# include <stdio.h>
void readstring(char *, int);

int main (void){
  char input [50];
  char output;
  char trash;

//initiation
printf("\n\t*Hi! Welcome to the assemble of Tut*\n");
printf("I can help you decode/encode a message to and from the code called Tut!\n");
printf("Enter a sentence to be translated frome Tut - English: ");
readstring(input, 50);
printf("Your Tut sencence is: %s \n",input);








  while (output != '\n') {
    output = getchar();
    if(output == '\n'){//escape sequence
      break;
    }
      if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        putchar(output);
        trash = getchar();
        trash = getchar();
      }else{
        putchar(output);
      }
  }
  return 0;
}// end main

//function lists start
void readstring(char * buffer, int size) {
  int x;
  char c = getchar( );

  if( c == '\n' ) {
    c = getchar( );
  }

  for(x = 0 ; (x < (size-1)) && c != '\n' ; x++) {
    buffer[x] = c;
    c = getchar( );
  }

  buffer[x] = '\0';
}

どんな助けやフィードバックも大歓迎です!お時間をいただきありがとうございます!

ps

あなたのアドバイスを考慮した後、コードを編集しましたが、最初の入力以降はすべて無視されているようです。!='\n' 条件を i < 50 に変更してみましたが、同じ結果が得られました。

ティムのアドバイスを受けた後のコード行:

    for (i = 0; input [i] != '\n'; ++i){
    output = input[i];
      if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        putchar(output);
        trash = getchar();
        trash = getchar();
      }else{
        putchar(output);
      }
  }
4

3 に答える 3

0

readstring関数はユーザーの端末から文字を読み取るために既に呼び出しているため、完了getchar後に再度呼び出す必要はありませんreadstring。代わりに、forループを使用しoutputて入力文字列の各文字を順番に設定します。

int i;
for i = 0; input[i] != '\n'; ++i {
    output = input[i]
    if((output != 'a') && (output != 'e') && (output != 'i') && (output != 'o') && (output != 'u') && (output != 'y') && (output != ' ')){
        ...
于 2015-12-07T21:25:46.913 に答える
0

…文字配列では、次の 2 文字をスキップする方法がわかりません。

配列インデックスをインクリメントして文字をスキップします。変化する

        trash = getchar();
        trash = getchar();

        input[++i] && input[++i] || --i;    // step back if at end of string

また、入力文字列は\0ではなく で終了するため\n

    for (i = 0; input [i] != '\n'; ++i){

    for (i = 0; input[i]; ++i)
    {
于 2017-09-04T06:15:06.307 に答える
0

主な問題は while ループにあります。このループでは、stdin から読み取ろうとする getchar を使用しています。ただし、入力は既に読み取られており、バッファーに格納されています。

したがって、文字を再度読み取るのではなく、バッファから文字を取得する必要があります。

于 2015-12-07T21:24:27.950 に答える