Даник Ковалевский aka DarkEol







Программирование  |  Преподавание  |  Публикации  |  Переводы и языки  |  Прочее  |  Про меня En / De / עב

Статьи  |  Скрипты  |  Сайты  |  Полезности  |  Ссылки

Здесь собираю разные полезные программистские мелочи:

C:
//Ошибки scanf():
int i; char c;
scanf("%i", &i);
scanf("%c", &c); //считывается перевод строки от предыдущего scanf
printf("'%c'", c);

scanf("%i", &i);
scanf("\n%c", &c); //перевод строки пропускается, считывается следующее значение
printf("'%c'", c);

do
{
     scanf("%i", &i); //если ввести символ, то попадаем в бесконечный цикл
     printf("%i\n", i); //во входном потоке есть данные, но они не того формата, который нужен
}                              //и съесть не можем и бросить жалко
while (i!=0);

do
{
     scanf("%i", &i);
     printf("%i\n", i);
     fflush(stdin); //очищаем входной поток в конце итерации, теперь он будет пуст
} while (i!=0);

do
{
     scanf("%i", &i);
     printf("%i\n", i);
     while (getchar()!='\n'); //пропускаем входной поток до перевода строки
} while (i!=0);

//Проблемы чтения текста из файла:
int n;
char text[50];
FILE* fp;
fp = fopen("file1.txt","r");
fscanf(fp, "%i\n", &n); // '\n' нужен чтобы пропустить символ перевода строки
fgets(text, 50, fp); // fgets считывает всю следующую строчку включая перевод строки
fclose(fp);
text[strlen(text)-1]=0; //выкидываем из прочитанной fgets строчки символ перехода строки.
printf("n = %i\ntext = %safter\n", n, text);
//printf("%s", strtok(text,"\n")); //другой вариант убрать перевод строки.


C++:
//Проблемы чтения текста из файла:
int n; string str;
ifstream fileIn("file.txt"); //открываем файл для чтения
fileIn >> n; //читаем число
fileIn >> str; //будет прочитано только первое слово в строке, до пробела
fileIn.close();

ifstream fileIn("file.txt");
fileIn >> n; //читаем число и остаемся в той же строке
getline(fileIn, str); //читаем пустоту, потому что до конца строки ничего нет
fileIn.close();

ifstream fileIn("file.txt");
fileIn >> n; //читаем число и остаемся в той же строке
fileIn.get(); //"проглатываем" символ перехода строки
getline(fileIn, str); //считываем всё до конца новой строки
fileIn.close();

//Классы использующие друг друга:
//Чтобы ниже не было ошибки "'Teacher' does not name a type"
class Teacher; //нужно объявить до класса Student, чтобы он его знал

class Student{
  private:
    string name;
    Teacher* t; //без объявления выше будет ошибка "'Teacher' does not name a type"

  public:
    Student(string name, Teacher* t)
    {
      this->name = name;
      this->t = t;
    }

    string getSName()
    {
      return name;
    }

//здесь только объявляем метод, реализация после класса Teacher
    void showStudent();
};

class Teacher{
  private:
    string name;
    Student* s;

  public:
    Teacher(string name)
    {
      this->name = name;
      s = nullptr;
    }

    string getTName()
    {
      return name;
    }

    void setStudent(Student2* s)
    {
      this->s = s;
    }
    void showTeacher()
    {
      cout << "I'm teacher, my name is " << name;
      if (s!=nullptr)
      {
        cout << ". My student is " << s->getSName() << endl;
      }
      else
        cout << ". I have no student" << endl;
    }
};

//чтобы не возникло ошибки "invalid use of incomplete type 'class Teacher'"
void Student::showStudent(); //метод нужно реализовать после Teacher
{  //здесь уже нужно знать про метод getTName()
  cout << "I'm student, my name is " << name;
  cout << ". My teacher is " << t->getTName() << endl;
}

int main()
{
  Teacher2 *sok = new Teacher2("Socrates");
  Student2 *plat = new Student2("Plato", sok);
  sok->setStudent(plat);
  sok->showTeacher();
  plat->showStudent();

  return 0;
}

C#:
Если при чтение русского текста из файла вместо букв отображаются знаки вопроса, то нужно или сохранить файл в кодировке utf-8 или указать кодировку во втором параметре конструктора StreamReader:
StreamReader sr = new StreamReader("file.txt", System.Text.Encoding.Default);

MySQL:
Создание пользователя в базе и выдача ему всех прав над базой:
GRANT ALL PRIVILEGES ON database.* TO user@localhost IDENTIFIED BY "password"

Если нужно продолжить автовозрастающее поле с определенного значения (например с 3):
ALTER TABLE tableName AUTO_INCREMENT = 3 (c)







Valid XHTML 1.0 © DarkEol, 2002–2024 Valid CSS Java 11.0.9