2015-10-13 13 views
0

Программа не печатает массив, она просто пустая. Это позволит мне строить без ошибок, но есть одно предупреждение заявление:Ошибка при печати массива с функциями

warning C4477: 'printf' : format string '%s' requires an argument of type 'char *', but variadic argument 1 has type 'int (__cdecl *)(int)'

Я хотел бы использовать указатель в программе, которая поэтому в нем из-за главы класс.

#include "stdafx.h" 
#define count 7 

int form1(int a); 
int form2(int a); 
int form3(int a); 
int form4(int a); 
int form5(int a); 
int form6(int a); 
int form7(int a); 

int main() 
{ 
    //creates a pointer to the functions for the program 
    int (*forms[count])(int) = { form1, form2, form3, form4, form5, form6 ,form7 }; 


    //prints out the array for sizeof data types 
    for (unsigned int i = 1;i >= count;i++) { 
     printf("%s", forms[i]); 
     printf("\n"); 
    } 

    return 0; 
} 
int form1(int a) { 
    a = sizeof(char); 
    return a; 
} 
int form2(int a) { 
    a = sizeof(short); 
    return a; 
} 
int form3(int a) { 
    a = sizeof(int); 
    return a; 
} 
int form4(int a) { 
    a = sizeof(long); 
    return a; 
} 
int form5(int a) { 
    a= sizeof(long long); 
    return a; 
} 
int form6(int a) { 
    a= sizeof(float); 
    return a; 
} 
int form7(int a) { 
    a= sizeof(double); 
    return a; 
} 
+2

'for (unsigned int i = 1; i> = count; i ++)' 'count = 7' и' i = 1', что меньше, чем '7', поэтому вы никогда не входите в' for' loop – Missu

ответ

5

Три вещи, неверны:

  1. printf следует использовать %d распечатать int, не %s. %s указывает, что вы печатаете char*, как сказал ваш компилятор. Кроме того, вам необходимо использовать круглые скобки после forms[i] (т. Е. forms[i]()), чтобы вызвать его правильно; в противном случае вы печатаете указатель на саму функцию, а не результат вызова функции. Обратите внимание, что я не включал никаких аргументов в мой вызов функции. Это из-за пункта 2 ниже.

  2. Существует абсолютно никакой рифмы или причины для прохождения в параметре, который сразу же выброшен и возвращен. Вместо int form1(int a) { a = sizeof(char); return a; }, например, использовать int form1() { return sizeof(char); } Если вы сделаете это, вы также должны изменить декларацию *forms в int (*forms[count])() = { ... };

  3. Ваш for петли следует читать unsigned int i = 0; i < count; i++.

+0

Я ценю помощь. Прекрасно работает ... Спасибо – Chris

Смежные вопросы