2012-06-22 2 views
0

В приведенной ниже программе я не получаю значения от printf.struct program in visual studio

#include<stdio.h> 

int main() 
{ 
    struct book 
    { 
     char name; 
    float price; 
    int pages; 
    }; 
    struct book b1,b2,b3; 

    printf("enter names prices & no. of pages of 3 books\n"); 
    scanf("%c %f %d",&b1.name,&b1.price,&b1.pages); 
    fflush(stdin); 
    scanf("%c %f %d",&b2.name,&b2.price,&b2.pages); 
    fflush(stdin); 
    scanf("%c %f %d",&b3.name,&b3.price,&b3.pages); 
    fflush(stdin); 
    printf("and this is what you entered\n"); 
    printf("%c %f %d",&b1.name,&b1.price,&b1.pages); 
    printf("%c %f %d",&b2.name,&b2.price,&b2.pages); 
    printf("%c %f %d",&b3.name,&b3.price,&b3.pages); 
    return 0; 
} 

и этот вывод я получаю

enter names prices & no. of pages of 3 books 
a 34.6 23 
b 23.4 34 
c 63.5 23 

and this is what you entered 

0.000000 0∞ 0.000000 0╪ 0.000000 0Press any key to continue . . . 

Почему не соответствует выходной вход?

+1

Большинство форматов 'printf()' в конце концов нуждается в новой строке, если вы не сознательно создаете один строка вывода из нескольких вызовов на 'printf()'. Более того, вы можете не видеть вывод, если вы не включаете новую строку или используете 'fflush (stdout)' или 'fflush (0)'. –

ответ

3
printf("%c %f %d",&b1.name,&b1.price,&b1.pages); 
printf("%c %f %d",&b2.name,&b2.price,&b2.pages); 
printf("%c %f %d",&b3.name,&b3.price,&b3.pages); 

Слишком много копий и вставки. Вы передаете указатели, когда printf ожидает char s, то же самое для поплавков и ints.

Вы передали адрес этих переменных в scanf, чтобы функция могла изменить их значение. Когда вы используете %d, %f и %cprintf ожидает int (не указатель на int), float (не указатель на float) и char (а не указатель на char).

+0

thnx, я удалил & в заявлении printf, теперь он работает правильно. –

2

Есть несколько проблем с программой:

  • char соответствует одному символу. Это недостаточно для хранения названия книги.
  • Проходите адреса в scanf, но передавать значения printf (т.е. нет & на printf «параметров s, за исключением, возможно, %p» s параметров)
  • Вам не нужно fflush ваши входные потоки - это не имеет никакого эффекта ,

Я думаю, вы должны изменить char namechar name[101] к (или любой другой максимальный размер вы предпочитаете), и scanf("%c...", &b1.name,...) для scanf("%100s...", b1.name,...). Обратите внимание, что амперсанд & отсутствует в b1.name: это связано с тем, что массивы распадаются на указатели при передаче функций в C.

+0

Да, я сделал. Сожалею. –

+0

@JonathanLeffler Хорошо, я удалил комментарий :) – dasblinkenlight