-4

私は今日、C 言語で持っていた限られた知識を更新しようとしましたが、その性質を定義できない非常に単純なコードにいくつかの不具合がありました....

私は非常にばかげた間違いをしているか、何かがバグっています...

コードブロック v12.11 IDE を使用し、C でプロジェクトをプログラムするようにセットアップしました (これは、バイナリをダウンロードするためのリンクです: http://www.codeblocks.org/downloads/binaries ) 。 GCCコンパイラが付属しています....

Windows XPおよびWindows 7マシンでこのIDE(およびdev-C ++ http://www.bloodshed.net/download.html -別のコンパイラを使用)を使用しました...

2 つのコードの両方 (個別にビルドおよびコンパイルされたものは機能しません)

最初のコードは、2 つの値を加算して "a" 変数に渡すだけの非常に単純なコードです...

ここにあります:

#include <stdio.h>

int main()
{
    int a,b,c,f;
    b=10;
    scanf("%d",&c);
    a=b+c;
    printf("%40s, %d",a);

return(0);
}

上記のように、まったく機能しません!! (私の意図は、var "a" の値を lineoutput の右側に 40 スペース表示することです) null メッセージを返すか、ウィンドウが致命的なエラー ウィンドウをポップアップ表示します... (昨日の私の PC の気分に依存するのは、コンソールは今日 null メッセージを返し、コンソール ウィンドウが応答していないことをウィンドウに通知することにしました...)

次のようにコードを編集すると:

int main()
{
int a,b,c,f;
b=10;
scanf("%d",&c);
a=b+c;
printf("%40s"); 
printf("%d",a);

return(0);
}

動作しますが、intreusult の前に ascII 文字が表示されます.. 次のように:

(奇妙なことに、数字の 7 を入力すると、文字が表示されず、代わりに PC のビープ音が鳴ります...また、数字以外の文字を入力すると、次のように無限にループします:

変数の型を FLOAT に変更すると、すべて正常に動作します..しかし、ご想像のとおり、結果は整数ではありません....

興味深いことに、すべてが FLOAT に変更されているが、scanf プロパティで入力が int [scanf("%d",&c);] に設定されている場合、プログラムは引き続き動作し、結果を float として表示しますが、ASCII 文字が前面に表示されます。そのうちの...

もう1つの奇妙なことは、99999のような大きな数字を入力すると、複数のASCII文字が表示されることです。ASCII文字コードは1から255などであるため、ASCII文字なしで結果を返すだけだと思います...

それで

  • 質問 A : コンパイラまたは IDE にバグがありますか (新規インストールでしたか)?

  • 質問 B : もしそうなら、どうすればいいですか? それを再インストールしますか?同じもの

    起こる...

  • 質問 C : ソフトウェアの問題 (IDE/COMP など) でない場合、これらの ASCII 文字が表示されるのはなぜですか??

PS結果をすべて一緒に投影し、上記のプリントスクリーンフレームを取得するために、「while」ループを使用しましたが、whileループを使用せずにコードをビルドおよびコンパイルすると、同じ結果が表示されます..しかし、必ず貼り付けてくださいすべての結果を 1 つのコンソールに表示するために使用した「while」コマンドを使用してコードを変更し、それらを印刷できるようにしました。

int main()
{
int a,b,c,f;
b=10;
while(b=10){
scanf("%d",&c);
a=b+c;
printf("%40s"); 
printf("%d",a);
}        
return(0);
}
4

1 に答える 1

5
printf("%40s, %d",a);

printf() に文字列を出力するように指示しましたが、文字列を指定していません。

試す:

printf("%40s, %d","",a);

それを行ったときにランダムなものが発生する理由については、文字列がポインターとして渡され、そのポインターの代わりに他のデータが渡されたためです (または、何も渡さなかった場合は、他に何が起こるかになります)。これはポインタとして解釈され、ほとんどすべてのことが起こる可能性があります。ランダムな ascii が出力されたり、プログラムがクラッシュしたりします。

ただし、ランダム ポインタがたまたまゼロ ターミネータを持つものを指している場合は、それを文字列として出力し、スペースで埋めます。2 つの printfs() を使用すると、おそらくこれが発生します - ほんの少しのランダムなガベージがあり、次にゼロ ターミネータがあります。運が良ければ、ポインターがゼロを直接指していて、空の文字列のように見えることさえあります。しかし、それは運にすぎません。絶対に当てにしてはいけません。既に観察したように、もう一度実行するか、別の時間に、または別のマシンで実行すると、動作が異なります。

于 2012-12-21T09:57:13.430 に答える