2016-05-27 14 views
-1

私はCプログラミングの初心者です。Cのprintfで関数を呼び出す?

私は平均を計算するための簡単なプログラムを書いていました。私は期待通りに動作しない

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
int main() 
{ 
    int n, s = 0, num, i; 
    float avg; 
    printf("Enter value of total no\n"); 
    scanf("%d", &n); 
    for (i=1; i<=n; i++) 
    { 
     void pri(int i){ 
      switch(i){ 
       case 1: 
        printf("st"); 
        break; 

       case 2: 
        printf("nd"); 
        break; 

       case 3: 
        printf("rd"); 
        break; 

       default: 
        printf("th"); 
        break; 
      } 
     } 
     printf("Enter %d pri(i) number\n", i); 
     scanf("%d", &num); 
     s += num; 
    } 
    avg = s/n; 
    printf("The average is %f",avg); 
    return 0; 
} 

しかし、PRI(I):

は、ここに私のコードです。しかし、その後私はここに、これを行うための別の方法を発見し、このコードの2番目のバージョンです:

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
int main() 
{ 
    int n, s = 0, num, i; 
    float avg; 
    printf("Enter value of total no\n"); 
    scanf("%d",&n); 
    for (i=1; i<=n; i++) 
    { 
     void pri(int i){ 
      switch(i){ 
       case 1: 
        printf("enter 1st number\n"); 
        break; 

       case 2: 
        printf("enter 2nd number\n"); 
        break; 

       case 3: 
        printf("enter 3rd number\n"); 
        break; 

       default: 
        printf("enter %dth number\n",i); 
        break; 
      } 
     } 
     pri(i); 
     scanf("%d", &num); 
     s += num; 
    } 
    avg = s/n; 
    printf("the average is %f",avg); 
    return 0; 
} 

私は最初のバージョンからのコードのこの第二の部分の結果を取得したいです。

プログラムのどこかで定義されているprintfの関数を呼び出すことはできますか?

+0

@mssirviこれを確認してください:http://stackoverflow.com/questions/2608158/nested-function-in-c –

+0

これは非常に役に立ちます。 @サム – mssirvi

答えて

2

printf()に実行中の別の関数を呼び出すように指示することはできません。 printf()は、この文字列の一部を置き換える書式設定文字列と引数を受け取ることを想定しています。あなたが何をしようとしている(フォーマット文字列に関数呼び出しを埋め込む)ことは、いくつかの理由で不可能です。

あなたができることは、印刷する代わりに文字列を返して、引数として使用することです。

const char *pri(int i) { 
    switch(i) { 
    case 1: 
     return "st"; 
    case 2: 
     return "nd"; 
    case 3: 
     return "rd"; 
    default: 
     return "th"; 
    } 
} 

printf("enter %d%s number\n", i, pri(i)); 

Cはネストされた関数(別の関数内で定義された関数)をサポートしていません。あなたのコンパイラは拡張機能のような関数のサポートを追加するので、あなたのコードが動作します。一般に、関数の入れ子は避けるべきです。

+0

* "別の関数の途中で関数を呼び出すことはできません" * ???私はこれらすべての年を間違ってプログラミングしてきたと思います。 ;)あなたが本当に意味することは、**別の関数内の関数を**宣言できないことです。 – abelenky

+0

@abelenky私は "コール"を意味しました。たぶん私は自分自身をもっとはっきりと表現できたかもしれない。私はその文を変更した。 – martinkunev

+0

ニース! (注:必要は-21、-3、-2、-1、21、31、...) – chux

関連する問題