2013-08-03 2 views
-1

Я писал программу c, задача которой заключалась в том, чтобы преобразовать градус Цельсия в Фаренгейт и наоборот. Я хотел, чтобы мой пользователя, чтобы обеспечить ввод в видеНеправильное выходное и предупреждающее сообщение '' Делает указатель из int ''

double, char 

Если персонаж будет либо «F» для Фаренгейта к преобразованию Цельсия, или «C» для Цельсия до преобразования Фаренгейта. Я написал эту программу, чтобы сделать это. Программа

#include <stdio.h> 
int main() 
{ 
    char in[10]; 
    int i; 
    printf("Welcome to the Tempurate Conversion Enter a "); 
    scanf("%s %d", i, &in); 
    printf(i); 
    printf(in); 
    return 0; 
} 

Когда я компилирую эту программу, я получаю это предупреждение: The Warning

CtoF.c: In function 'main': 
CtoF.c:8:4: warning: passing argument 1 of 'printf' makes pointer from integer w 
ithout a cast [enabled by default] 
c:\mingw\bin\../lib/gcc/mingw32/4.6.2/../../../../include/stdio.h:294:37: note: 
expected 'const char *' but argument is of type 'int' 

я когда побежал к программе и дал этот вход: на вход

3 C 

и получил этот выход: Выход

[email protected] 

Я хочу знать смысл предупреждающего сообщения и что я могу сделать, чтобы исправить его.

+1

'scanf ("% s% d ", i, &in);' -> 'scanf ("% d% s ", i, in);' (обратите внимание на порядок спецификаторов формата и удаленный символ амперсанда - это не то, как вы используете адрес оператора). –

+1

@ H2CO3; Почему вы удалили '&' с 'i'? – haccks

+1

@haccks Потому что я сделал опечатку. Я только хотел удалить его из 'in'. (Спасибо, что указали это.) –

ответ

0

Ваше заявление printf неверно.

printf ожидает массив символов, такой как char in[10]. Однако вы передаете целое число. int i.

Предупреждения информируют вас о том, что, поскольку printf ожидает параметр указателя и вы передаете целое число, это целое число передается в указатель.

Так что, если ваше число имеет значение 100 теперь пытается прочитать из адреса памяти, расположенный на 100 и сохраняет дамп памяти до тех пор пока \0 символа/значение найдено

3

Проблемы с спецификаторами формата в scanf и printf ,

scanf("%s %d", i, &in); 

должен быть

scanf("%d %s", &i, in); 

И

printf(i); 
printf(in); 

должен быть

printf("%d", i); 
printf("%s", in); 

И примечание стороны:

Я хотел, чтобы мой пользователь, чтобы обеспечить ввод в виде double, char

Для этого вы должны изменить int i к

double i; 

и спецификатором преобразования %d до %lf в scanf:

scanf("%lf %s", &i, in); 
0

PRINTF работает следующим образом:

первый аргумент Printf сообщает, сколько аргументов ожидается

printf("%d", n); 

говорит, что один аргумент, как ожидается (ИНТ указатель)

printf("%d %d", n, m); 

сообщает, что есть два аргумента, поэтому ваш синтаксис неверен

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