Страницы

Поиск по вопросам

Показаны сообщения с ярлыком cs50. Показать все сообщения
Показаны сообщения с ярлыком cs50. Показать все сообщения

вторник, 31 марта 2020 г.

Помогите исправить ошибку: use of undeclared identifier 'n'

#cpp #c #cs50


Помогите исправить ошибку в программе по подсчету кол. монет. Когда начинаю компилировать
вылетает ошибка: 
use of undeclared identifier 'n'
В программировании я полный новичок, поэтому не исключено, что весь мой код одна
сплошная ошибка, но насколько я понял компилятор не видит где описывается n, хотя я
описал ее в 15 строке

#include
#include
#include
float GetMyFloat();
int main(void)
{
    printf("Сдача: ");
    float i = GetMyFloat();

    float a = 0.25;
    float b = 0.10;
    float c = 0.05;
    float d = 0.01;

    for (float n = 0; n>0.0; n=n+1)
    {
      if (i>=a)
      {
        i = i-a;
      }
      else if(i>=b)
      {
        i = i-b;
      }
      else if (i>=c)
      {
        i = i-c;
      }
      else if (i>=d)
      {
        i = i-d;
      }

    }
    printf("\n");
    printf("%i\n", n);

}

float GetMyFloat(void)
{
    float i;
    do
    {

      i = get_float();
      while (i<1)
      {
          printf ("Число должно быть больше 0!\n");
          printf("Сдача: ");
          i = get_float();
      }
    }
      while (i<1);
      return i;
}

    


Ответы

Ответ 1



Вы пытаетесь вывести n все зоны ее существования, обьявите переменную выше попробуйте данный код (код написан без компилятора могут быть ошибки) :) почитайте еще про область видимости #include #include #include using namespace std; float GetMyFloat(); int main(void) { cout << "Сдача: "; float i = GetMyFloat(); float a = 0.25; float b = 0.10; float c = 0.05; float d = 0.01; float n = 0; for (n>=0.0; n++) { if (i>=a) { i = i-a; } else if(i>=b) { i = i-b; } else if (i>=c) { i = i-c; } else if (i>=d) { i = i-d; } } cout << "\n" << "%i\n" << n; } float GetMyFloat(void) { float i; do { i = get_float(); while (i<1) { printf ("Число должно быть больше 0!\n"); printf("Сдача: "); i = get_float(); } } while (i<1); return i; }

понедельник, 9 марта 2020 г.

Ввод данных в С. Не определяется GetString() из cs50

#c #gcc #make #cs50


Почему у меня не определяется string s = GetString();?

hell.c

#include 
#include 

int main(void)
{
    printf("State our name: ");
    string s = GetString();
    printf("hello, %s\n", s);
}



  cc hell.c -o hell

/tmp/ccHZXs2m.o: In function `main'
hell.c:(.text+0x16): undefined reference to `GetString'
collect2: error: ld returned 1 exit status
make: *** [hell] Error 1


    


Ответы

Ответ 1



Почему бы тебе не воспользоваться методом scanf() для чтения с консоли? int main(void) { string name; printf("Введите ваше имя"); scanf("%s", name); printf("Привет, %s\n!", name); return 0; }

Ответ 2



Нужно скомпилировать и слинковать с файлом cs50.c cc -c help.c -o help.o cc -c cs50.c -o cs50.c cc -o help help.o cs50.o

Ответ 3



Потому что у тебя нету такой функции GetString(). Добавь например выше.. string GetString(void) { return "test"; }

Ответ 4



Могу предположить, что у вас слетели или не были настроены переменные среды CFLAGS и LDLIBS. Попробуйте создать в этой же папке файл с названием makefile и поместить в него данные строки: CC=clang CFLAGS=-ggdb3 -O0 -std=c99 -Wall -Werror LDLIBS=-lcs50 -lm После чего просто вызовите make: make hell for ABC ;)

Ответ 5



Потому что cs50 это библиотека курса гарварда cs50. А у Вас она не установлена. Запустите в их удаленной линуксовой среде и там подцепится.

Ответ 6



Используйте консоль в редакторе (отдельная иконка рядом с gedit). Тогда независимо от того, подключите ли вы библиотеку string.h или нет, функция GetString сработает.

Ответ 7



.h файл только декларирует список функций, для их использования в программу должен быть вкомпилирован их код находящийся скорее всего в .cшных файлах (но может оказаться в .asm .haskell ... .lib .dll .so .a) в самом простейшем случае у вас где-то должен лежать файл cs50.c, который тоже нужно скомпилировать: gcc -o ./hello[.exe] hello.c cs50/lib/src/cs50.c PS: описание принципа использования модулей, раздельной компиляции и использования ключевого слова static неплохо объяснено в курсе Евгения Линского

Ответ 8



В окружении CS50 на c9.io начиная с 2016 эту функцию переименовали в: get_string() Используйте её или найдите более свежие видео-лекции.

Ответ 9



Потому, что ты не читал нормально начало к заданиям - ТАМ ТАК ЖИРНО написано ЦТ Дополнительные материалы reference.cs50.net/ — разъяснение функций библиотек, используемых во время обучения. На английском. http://computer.howstuffworks.com/c.htm стр. 11 – 14 и 39 И вот если пройти в разъяснение функций библиотек - и поискать поиском string - то будет чудо, выяснится что надо подключать библиотеку string.h - а она не прописана в cs50 - ребята не на все делали костыль! Зачем костыль на библиотеку готовую?

четверг, 30 мая 2019 г.

Ввод данных в С. Не определяется GetString() из cs50

Почему у меня не определяется string s = GetString();?
hell.c
#include #include
int main(void) { printf("State our name: "); string s = GetString(); printf("hello, %s
", s); }
cc hell.c -o hell
/tmp/ccHZXs2m.o: In function `main' hell.c:(.text+0x16): undefined reference to `GetString' collect2: error: ld returned 1 exit status make: *** [hell] Error 1


Ответ

Почему бы тебе не воспользоваться методом scanf() для чтения с консоли?
int main(void) { string name; printf("Введите ваше имя"); scanf("%s", name); printf("Привет, %s
!", name); return 0; }