Ошибка При Обработке Данных

  • Автор темы WildClown
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

WildClown

#1
cтолкнулся с такой пробелммой (только начал изучать C++ на базе MS Visual Studio 2008)
Run-Time Check Failure #2 - Stack around the variable 'vv3' was corrupted.
суть программы элементарна - пользователь вводит данные, а они всего лишь выводятся ввиде таблицы. Собственно преподователю было "некогда" помочь решить эту проблемму, вот решил задать вопрос тут.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код программы</div></div><div class="sp-body"><div class="sp-content">
C++:
#include <stdio.h>
#include <locale.h>
int main(void) {
char vid1[5], vid2[5], vid3[5];
char dm1, dm2, dm3;
float pm1, pm2, pm3;
short vv1, vv2, vv3;
setlocale (LC_ALL,"rus");
printf("1. Введите:Вид транс,длин марш,Протяж марш (км),Время в дороге(мин)");
scanf("%s %c %f %d",vid1, &dm1, &pm1, &vv1);
printf("2.Вид транс,длин марш,Протяж марш (км),Время в дороге(мин)");
scanf("%s %c %f %d",vid2, &dm2, &pm2, &vv2);
printf("3. Введите:Вид транс,длин марш,Протяж марш (км),Время в дороге(мин)");
scanf("%s %c %f %d",vid3, &dm3, &pm3, &vv3);
printf("-----------------------------------------------\n");
printf("|Ведомость общественного транспорта |\n");
printf("|---------------------------------------------|\n");
printf("| Вид транс| длин марш |Протяж марш (км)|Время в дороге(мин)|\n");
printf("|----------|-------|-----------|-------------|\n");
printf("| %s | %c | %f | %d |\n", vid1, dm1, pm1, vv1);
printf("| %s | %c | %f | %d |\n", vid2, dm2, pm2, vv2);
printf("| %s | %c | %f | %d |\n", vid3, dm3, pm3, vv3);
printf("|---------------------------------------------|\n");
printf("| Примечание: Тр - трамвай, Тс - троллейбус;|\n");
printf("|А - автобус|\n");
printf("-----------------------------------------------\n");
return 0;

}
 
R

rrrFer

#2
я бы убрал пробелы в scanf, остерегся бы %c (потому что он считывает один символ, даже если это пробел), удалил бы все лишнее (и посмотрел бы что у меня вводится в самом первом scanf-е- а уже там не все гладко, vv3 тут не причем, программа чудом не падает раньше).

Добавлено:
Код:
#include <stdio.h>

int main() {
char vid1[5], dm1;
float pm1;
short vv1;
scanf("%s %c%f%d", vid1, &dm1, &pm1, &vv1);
printf("| %s | %c | %f | %d |\n", vid1, dm1, pm1, vv1);
return 0;
}
а лучше убери %c и символ замени на char dm1[2], Это тоже не лучший вариант, но по крайней мере, программа не будет падать при вводе двух пробелов перед символом )
 
R

rrrFer

#3
Собственно преподователю было "некогда" помочь решить эту проблемму, вот решил задать вопрос тут.
Преподаватель все делает верно. Он подталкивает вас к чтению книжек и самостоятельной работе. К форуму стоит обращаться когда все остальные методы перепробованы. В Вашем случае было бы достаточно один раз пройтись по программе отладчиком и сравнить считанные программой значения с ожидаемыми.
 
W

WildClown

#4
r04
уже рано советы довать, сам разобрался через 10 мин.
Про преподавателя могу сказать одно - дно. Прити сказать за всю пару что теперь мы учим C и собственно C++ , это скилл конечно.
 
E

Eleno4ka

#5
WildClown, нельзя быть преподавателем не умея учить. На всё возможен человеческий фактор, что-нибудь вроде: устал,все достали, и т.д.
А вообще скорее всего у таких как он руки опускаются учить тех что даже четыре слова нормально написать не может.
"Уже (произошедшее действие) рано (отсрочка действия) совета довать (неграмотность)" - великий русский язык
 
Статус
Закрыто для дальнейших ответов.