1

char配列を埋めようとしていますが、何らかの理由でEnterキーを押すたびに改行が配列に入力されます。これは、配列の半分がLFであることを意味します。fflush を実行してみましたが、うまくいかないようです。

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

void bubbleSortChar( char arr[], int size);
//The instruction say to get ch *then* call binarySearchCh, so I think you
//have to add a field.
void binarySearchCh(char arr[], int size,char val,int findall); 

main()
{
    char chArray[100];
    char ch;
    int i = -1;


    while(++i<100 && scanf("%c",&chArray[i]))
        fflush(stdin);

    bubbleSortChar(chArray,100);

    fflush(stdin);
    printf("Enter a char to find.");
    scanf("%c",&ch);

    binarySearchCh(chArray,100,ch,1);


}    

毎回空白を手動で削除せずにこれを行う方法はありますか? 私はそれを行うことができましたが、fflush がこれを処理する必要があるようです。これは入門コースなので、それほど難しいことではありません。

4

1 に答える 1

3

指定子の前にスペースを置いて、押すたびに inループで取り残される文字 ( )%cを食べ尽くします。変化する \n<Return>scanfwhileEnter

while(++i<100 && scanf("%c",&chArray[i]))

while(++i<100 && scanf(" %c",&chArray[i]))  

fflush(stdin);MS-DOS を使用していない場合は、未定義の動作が呼び出されます 。


OPのコメントによると;

コマンド プロンプトを使用している場合はどうなりますか? に関しては、それは私がtkinterに使用しているものなので、Cでも同じであると想定しました。実際にそこに入れられているのは、改行であるASCIIコード10だと思います。<Return>とはどう違いLFますか?

オペレーティング システムが異なれば、新しい行を理解する方法も異なります。Macは改行文字としてのみ認識\rしますが、UnixLinux\nは改行文字として認識します。私の知る限り、Windowsは新しい行として解釈するために両方の文字を一緒にする必要があります\r\n(私はそれについて確信が持てません)。これが、ある OS で作成されたファイルが別の OS で正しく開かれず、乱雑になる理由です

于 2013-10-12T22:48:45.213 に答える