Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.11.2008, 02:24   #1
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию Проблема с strcpy()

Написал не большую программу, где требуется ввести количество полученных медалей, подсчитать количество баллов и после этого упорядочит список в соответствие с набранным количеством очков. При написание программы использовал функцию strсру().
Если я не ошибаюсь синтаксис этот функции должен выглядеть так:
strсру(Строка1,Строка2) - Копирует строку Строка1 в строку Строка2.
После того как в программу ввести все данные то почему то появляется сообщение о завершение программы. Я так думаю это наверное из за strсру()… В общем помогите разобраться почему программа не работает.
Код:
#include "iostream"
#include "windows.h"
#include "stdlib.h"

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	setlocale(LC_ALL,"Russian");
	int const n=10;
	char *st[]={"Германия\0","Норвегия\0","Россия\0","Автсралия\0","Канада\0","США\0","Финляндия\0","Япония\0","Китай\0","Корея\0"};
	char buf[9];
	int result[n+1][5],i,j,max;
	printf("Введите в одной строке количество золотых, серебряных и бронзовых медалей.\n");
	for(i=0;i<n;i++)
	{
		printf("%s: ",st[i]);
		scanf("%i %i %i",&result[i][0],&result[i][1],&result[i][2]);
	}
	for(i=0;i<n;i++)
	{
		result[i][3]=result[i][0]+result[i][1]+result[i][2];
		result[i][4]=result[i][0]*7+result[i][1]*6+result[i][2]*5;
	}
	for(i=0;i<n-1;i++)
	{
		max=i;
		for(j=i+1;j<n;j++)
			if(result[j][4]>result[max][4]) max=j;
		strcpy(st[i],buf);
		strcpy(st[max],st[i]);
		strcpy(buf,st[max]);
		for(j=0;j<5;j++)
			result[n][j]=result[i][j];
		for(j=0;j<5;j++)
			result[i][j]=result[max][j];
		for(j=0;j<5;j++)
			result[max][j]=result[n][j];
	}
	for(i=0;i<n;i++)
		printf("%s\n",st[i]);
}
TheWanderer вне форума
Старый 26.11.2008, 12:01   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

не смотрел твой код.
Цитата:
strсру(Строка1,Строка2) - Копирует строку Строка1 в строку Строка2.
наоборот, строку2 в строку1. я тебе уже сказал поставить мсдн, скажу еще раз. поставь мсдн. и таких вопросов не будет.
vvviperrr вне форума
Старый 26.11.2008, 16:27   #3
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию

Поменял местами строки. Программа всё равно отказывается работать…
TheWanderer вне форума
Старый 26.11.2008, 23:49   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Замечания по коду:
1.
Код:
#include "iostream"
#include "windows.h"
#include "stdlib.h"
Так ты можешь писать только если эти файлы лежат в одной папке с проектом. Нужно написать
Код:
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
И добавить string.h.

2. У тебя main типа int - значит в конце должна возвращать значение.
Допиши
Код:
return 0;
в конце проги перед закрывающей скобкой.
Пока все.
MaTBeu вне форума
Старый 27.11.2008, 02:52   #5
filosof_x86
...
Форумчанин
 
Аватар для filosof_x86
 
Регистрация: 01.06.2008
Сообщений: 134
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
1. Так ты можешь писать только если эти файлы лежат в одной папке с проектом. Нужно написать
Нет, не так. Если используется конструкция #include "file", то file будет сначала искаться в той же папке, что и файл, который подключает file. Если file не будет найден в этой же папке, то будет продолжен поиск как при #include <file>.

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
2. У тебя main типа int - значит в конце должна возвращать значение.
Допиши
Код:
return 0;
в конце проги перед закрывающей скобкой.
Необязательно, стандарт разрешает не писать return в main(). Если он не написан, то main() вернет сама 0.
filosof_x86 вне форума
Старый 27.11.2008, 02:54   #6
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию

Внес изменения, но программа всё равно отказывается работать...
TheWanderer вне форума
Старый 27.11.2008, 09:18   #7
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

извините, ошибся окном
Учиться, учиться и еще раз учиться

Последний раз редактировалось Ламер_001; 27.11.2008 в 09:27.
Ламер_001 вне форума
Старый 27.11.2008, 17:07   #8
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Ты запускаешь прогу в винде типа кликом по эксешнику? ))) Ну так и понятно, после вывода окно сразу закрывается, и ты не увидишь ничего.

Есть несколько путей.
1) Запускать прогу нажатием Shift+Enter (тогда окно останется висеть по завершению проги)

2) Запускать из под cmd. (Там вообще весь вывод видно)

3) #include <conio.h> и в самом конце программы пиши getch(); (на этом месте она быдет ждать пока ты ткнёшь в клаву)

4) Перенаправлять весь вывод в файл ))) Дебильный метод, но может в других случаях пригодится. Делается так - "your_prog.exe >output.txt" в коммандной строке.

З.Ы. Код не читал.
theos вне форума
Старый 27.11.2008, 21:05   #9
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Код:
strcpy(st[i],buf);
strcpy(st[max],st[i]);
strcpy(buf,st[max]);
на каждом проходе цикла st[i] перепишется значением buf, st[max], перепишется значением st[i] и т.д.
функция strcpy ПЕРЕПИСЫВАЕТ строку-приемник. Чтобы дописать в строку используется ф-я strcat(приемник, источник) - если тебе именно это надо.

ЗЫ: ставь мсдн. не не не, серьезно - ставь мсдн))))
ams007 вне форума
Старый 28.11.2008, 15:47   #10
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от theos Посмотреть сообщение
Ты запускаешь прогу в винде типа кликом по эксешнику? ))) Ну так и понятно, после вывода окно сразу закрывается, и ты не увидишь ничего.
Программа не закрывается, а появляться сообщение о прекращении работы программы с тремя кнопками: Искать решение проблемы в интернете, Закрыть программу, Отладить программу.
Цитата:
Сообщение от ams007 Посмотреть сообщение
Код:
strcpy(st[i],buf);
strcpy(st[max],st[i]);
strcpy(buf,st[max]);
на каждом проходе цикла st[i] перепишется значением buf, st[max], перепишется значением st[i] и т.д.
функция strcpy ПЕРЕПИСЫВАЕТ строку-приемник. Чтобы дописать в строку используется ф-я strcat(приемник, источник) - если тебе именно это надо.

ЗЫ: ставь мсдн. не не не, серьезно - ставь мсдн))))
мне вообще-то нужно что бы она её ПЕРЕПИСЫВАЛА.
TheWanderer вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с gets() TheWanderer Общие вопросы C/C++ 12 21.11.2008 14:35
strcpy (visual c++ 6.0) JOFRIF Visual C++ 2 04.08.2008 12:19
Проблема. kupulau Общие вопросы C/C++ 19 05.02.2008 21:11
Проблема Vanek B Общие вопросы Delphi 4 17.12.2006 13:30