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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 22:45   #1
KaZag
Новичок
Джуниор
 
Регистрация: 12.02.2012
Сообщений: 5
Печаль не работает gets в С++

вот код.так все работает.но если заменить cin>>s1 на gets(s1) компилятор ругается на gets.что сделано не так?просьба тапками не кидать, я новенький.вот уже второй день пытаюсь разобраться.

задание звучит так: даны две фамилии, сравнить их и выдать какая длиннее.

Код:
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;


int main()
{
    string s1;
    string s2;
    cout<< "familya 1: ";
    cin >> s1;
    int len=s1.length();
    cout<< "familya 2: ";
    cin >> s2;
    int str = s2.length();
    if (len > str) cout << "familya 1 > familya 2";
    else if (len < str) cout << "familya 1 < familya 2";
    else cout << "vi cho, sdurely?!?!?!";
    cin>>s1;
    return 0;
}
Еж - птица гордая: пока не пнешь, не полетит./Конан - Натуралист/

Последний раз редактировалось ACE Valery; 13.02.2012 в 17:40.
KaZag вне форума Ответить с цитированием
Старый 12.02.2012, 23:11   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

gets вроде как с char работает а не с string... хотя быть может я и ошибаюсь...
+ почитал что компиляторы некоторые просто так матюкаются на него... мол не используйте его... старая это фича... о думаю это все изза типа данных... попробуй сделать через char...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 12.02.2012, 23:40   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

VIK_aka_TOR совершенно прав, касательно типа данных, gets принимает указатель на массив символов. Но эта функция не рекомендована к использованию, так как не проверяет границы массива и может переполнить его. Рекомендуется использовать fgets вместо неё.
Код:
#include <stdio.h>
#include <string.h>

int main(void) {
  char first[80];
  char second[80];
  int  diff;

  fgets(first, 80, stdin); // stdin - стандартный поток ввода
  fgets(second, 80, stdin); // 80 - максимальное кол-во символов, которым будет заполнен массив

  diff = strlen(first) - strlen(second);

  if (diff > 0)
    puts("First surname is longer then the second one"); 
  else if (diff < 0)
    puts("Second surname is longer then the firse one");
  else
    puts("The length of the surnames are equal");
}

Последний раз редактировалось netrino; 12.02.2012 в 23:45.
netrino вне форума Ответить с цитированием
Старый 13.02.2012, 21:18   #4
KaZag
Новичок
Джуниор
 
Регистрация: 12.02.2012
Сообщений: 5
По умолчанию

ааа, все понял!спасибо.
Еж - птица гордая: пока не пнешь, не полетит./Конан - Натуралист/

Последний раз редактировалось KaZag; 13.02.2012 в 21:27.
KaZag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа работает пошагово, но не работает при запуске -Katerina- Microsoft Office Excel 3 12.07.2011 03:40
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04
TP7 чтение из файла, работает но не работает!? Qousio Помощь студентам 7 02.06.2009 09:37
Библиотека НЕ работает с 2008, но работает с 2000 SQL namenike Общие вопросы C/C++ 0 26.05.2009 11:04