2014-02-13 2 views
2

У меня проблема с моей программой на C. Вот мой основной (код):Scanf_s не сохраняет значение строки

void main() 
{ 
const float impo = 0.45; 
const float reve = 0.28; 
char name[30]; 
float pauto, pfab, pimp, prev; 
printf("Enter the car name\n"); 
scanf_s(" %s", name); 
printf("Enter the price of retail\n"); 
scanf_s("%f", &pfab); 
pimp = pfab * impo; 
prev = pfab *reve; 
pauto = pfab + pimp + prev; 
printf("Car name : %s\tCar final Price = %.2f\n\7",name,pauto); 
system("pause"); 

} 

Проблема заключается в том, что, когда я скомпилировать свой код и ввести название автомобиля, он don't появится позже на Printf ... Может кто-нибудь помочь мне, пожалуйста?

ошибки Изображение: http://i.imgur.com/aZ360Fi.png

+0

Не относится к вашей проблеме, но вы должны использовать 'getchar()' вместо 'system (" pause ")', что более переносимо. – Overv

+0

Также может быть связан с компилятором. – trumpetlicks

+0

Если это программа на C, не следует автоматически перекрестно тегировать C++ (и наоборот). Языки разные и разные. – crashmstr

ответ

2

Это

scanf_s("%s", name); 

должно быть:

scanf_s("%s", name, sizeof(name)); /* Assumes char name[42 or such]. */ 

From MSDN:

В отличие от зсапЕ и wscanf, scanf_s и wscanf_s требует размер буфера, чтобы быть заданы для всех входных параметров типа гр, C, сек, S, или наборы контрольных строк, которые заключены в []. Размер буфера в символах передается как дополнительный параметр, непосредственно следуя указателю на буфер или переменную.


Он должен быть

int main(void) 

кстати.

+0

Это правильно, спасибо большое за ваше время :) –

1

Попробуйте использовать

scanf_s("%s", name, _countof(name)); 

scanf_s является безопасной версией зсапЕ, что требует параметра для размера буфера, который необходимо ввести.

Посмотрите здесь также http://faculty.edcc.edu/paul.bladek/CS131/scanf_s.htm

+0

Поскольку 'scanf_s' уже нестандартен, это можно сделать менее подверженным ошибкам, используя '_countof (name)', как показано [в документах] (http://msdn.microsoft.com/en-us/library/w40768et.aspx). – user2802841

+0

@ user2802841 Хороший момент, мой первоначальный ответ был просто объяснением того, что его использование API было неправильным, и ему пришлось добавить некоторую версию определения размера буфера в качестве параметра. – trumpetlicks

+0

Это верно, спасибо большое помощник: p –

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