2017-03-04 10 views
1

私はこのコードを実行しようとしていますが、最終結果はあまり説得力がありません。予想される出力以下C言語で入力したときに予期しない動作が発生する

0 50 

されています:

50 50 

注出力以下

Enter No. of Testcases & Faults 
50 50 code 

されています。以下は

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 

サンプル入力されています。ここでは、コードです私はunsigned charとcaを使うことに縛られていますunsigned intは使用しません。

私はDevCpp 4.9.9.2を使用しています。誰にでも解決策がある場合や、なぜこれが起こっているのか理由がある場合は、助けてください。

+5

間違った型へのポインタを渡すために、間違った種類の未定義の動作を見ることができます。 – EOF

答えて

3

あなたのscanf節を調べてください。 unsigned char変数を2つ(ポインタ)に渡していますが、書式指定子(%d指定子)に2つのintsを読み込んでいることを宣言してください。 unsigned charとしたい場合は、%hhuを渡してください。

&extensionscanfに渡すときには、アンパサンドを使用する必要はありません。配列の名前は最初の要素へのポインタに変換されるので、extensionを渡すだけで十分です。

開発していない非常に古いIDE(Dev-C++)も使用しています。おそらく基礎となるコンパイラも日付が付いているでしょう。私は新しいツールを使用することをお勧めします。Code::Blocksが開発されており、かなり新人フレンドリーでDev-C++に似ています。

ただし、Windowsプラットフォームでは、このquestionに記載されているように、MSVCRTライブラリは%hhuフォーマット指定子をサポートしていません。 MingGWコンパイラはこの実装に依存しているため、Windowsでは%hhuもサポートしていません。 Cygwinは、Windows上のLinux環境をシミュレートし、独自のバージョンのCライブラリとともに配布され、特に%hhuをサポートするプロジェクトです。 sidenoteとして、Code :: BlocksをCygwinで動作するように設定することができます(hereのように)。 Dev-C++で同じことが達成できるかどうかはわかりません。

+0

%hhuを使用すると、前と同じ結果が得られます。問題は私が推測するコンパイラにあります。あなたは何を言っていますか? @lukeg –

+0

@Ankitコンパイラのバージョンが%hhuフォーマット指定子をサポートしていることを確認してください。私は新しいものを試してみるか、C99モードに切り替えることをお勧めします。しかし、Windowsを使用しているときには、別の互換性の問題に直面する可能性があります。詳しくは、この質問を参照してください:http://stackoverflow.com/questions/15825254/why-is-scanfhhu-char-overwriting-other-variables-when-they -are-local – lukeg

+0

私はその質問を見ました。私は同じ問題に直面しています。グローバル変数としてnTとnFを宣言すると、出力は期待通りですが、問題はローカル変数として宣言することです。これは、私が想定しているWindows固有の問題です。とにかく情報ありがとう@lukeg –

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned int nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 
+0

@dipikaにお返事いただきありがとうございますが、私はunsigned charを使用することになっており、intを使用することはできません。 –

+0

'%u'は'%d'ではなく 'unsigned int'フォーマット指定子です。 – lukeg

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%hhu %hhu %s", &nT, &nF, extension); 
    printf("%hhu %hhu\n",nT,nF); 
    // getch(); 
} 

あなたは `)(` scanf関数に下の画像に出力

enter image description here

+0

上記の入力のためにあなたのマシンでこのコードが動作していますか? –

+0

私はWindowsを使用しているので、Windowsプラットフォームでこのコードをテストすると素晴らしいでしょう:) –

+0

プラットフォームに問題はありませんでした。そこでコンパイルして実行することができます。答えをアップしてください。 –

関連する問題