2

私の宿題では、基数間の変換にホーナーズ アルゴリズムを実装する必要があります。

getchar()この任務に使用するように言われました。しかし、Enter キーを押してもプログラムが終了せず、さらに多くの文字が取り込まれるという問題が発生しています。

例:

bryce> ./pa1
Enter the fromRadix:16

Enter the toRadix:2
abc
abc
^C
bryce> 

コード:

int readRadixA(int radixA)
{
    char myChar = getchar(); 
    int result = 0; 
    int run = 0; 

    while(myChar != EOF)
    {
        if(myChar == "\n")
            break;

        Horners();

        myChar = getchar(); 
    }

    return result;
}

Horners の実装に支援を求めているわけではありません。getchar()を正しく終了するための助けを求めています。

4

5 に答える 5

5
if(myChar=="\n")
           ^  ^

比べ方をmyChar間違えています。代わりにこれを試してください:

if(myChar == '\n') 
             ^  ^

2 番目の問題は、 ではなくをgetchar返すことです。たぶん、次のように書き換えることができます。intchar

int myChar;
while((myChar = getchar()) != EOF && myChar != '\n')
{
    /* Your stuff. */
}

編集

コメントに照らして、それ以前のstdio操作がバッファにwhile残っていると思います。\n

scanf("%d", &radix)試す代わりに:

scanf("%d ", &radix);
         ^

そのスペースによりscanf、残りの空白 (改行を含む) が消費されます。

于 2012-02-04T07:50:09.580 に答える
1

の戻り値の型を確認してくださいgetchar()。はい、それはintです。これEOFは、有効な文字と区別できる値が必要だからです。myChar実際に にする必要がありますint

于 2012-02-04T07:50:31.437 に答える
0

コードを確認したところ、toRadix の後に入力キーボード バッファに '\n' が残っていると思います。

そして、彼らはもう1つのことです

 getchar()  

「\n」が受信されるまで、一度にすべての文字を読み取ります。

そして、比較することによって犯したもう1つの間違いがあります

   char to a pointer e.g  mychar=="\n"

toRadix の実装に関する詳細情報は、質問に答えるのに非常に役立ちます

于 2012-02-04T09:19:59.993 に答える
0

Linux では、標準入力を終了するには、次のように入力する必要があります  Ctrl-D。カーネル層とtty層は、これをファイルの終わりのマークまたは状態にします。次にgetchar与えますEOF(これは有効なではありませんchar。たとえば、char0 から 255 までの符号なしバイトであるシステムでは、EOF-1 になる可能性があります)。

feof(3)は読み取り操作 (例: 、など) のにのみ有効であるため、コーディングは一般的に間違っていることに注意してください(この回答の以前のバージョンで書いたこととは対照的に)。返されていることをテストする方がよいので、(ではない)にする必要があります。getcharfgetswhile(feof(stdin))getcharEOFmyCharintchar

于 2012-02-04T07:51:14.143 に答える
0

このコードを試してください

int readRadixA(int radixA)
{
    char myChar;
    int result = 0; 
    int run = 0; 

    do
    {
        myChar = getchar(); 
        // implement horners here
    }while(myChar != 13);

    return result;
}
于 2012-02-04T07:53:24.173 に答える