0

Есть файл с таким набором точек:

7496,9214700000002 0,20898565871874042
7460,2758599999997 0,20913999999999999
2702,1319699999999 0,22917999999999999
2441,7552300000002 0,24504999999999999
2356,8917000000001 0,24748999999999999
2310,6025000000000 0,26036999999999999
2167,8774699999999 0,27059000000000000
2027,0811600000000 0,29768000000000000

Мне нужно считать 1 число из строки в массив mX ,а второе в mY.Не понимаю как это сделать,да так чтобы он еще и на следующую строчку переходил. Пытался так,но не получается

ifstream infile("txt.txt");
while(!infile.eof()){
  infile>>mX>>mY
Alpharius
  • 259
  • Что такое "не получается"? (И в программах на С и С++ не должно быть прямых обращений к eof(). Откуда вы взяли такую манеру написания цикла?) – AnT stands with Russia Oct 09 '19 at 19:50
  • @AnT ну почему-то 1 число считывается ,а 2 нет.Думал,что это хорошая проверка на конец файла – Alpharius Oct 09 '19 at 20:00
  • У вас настройки локали вообще какие? Как числа писаться должны: через запятую или через точку? Почему у вас в файле именно запятые? – AnT stands with Russia Oct 09 '19 at 20:13
  • @AnT Большое спасибо,я и не заметил запятые ,что привело к ошибке.Не подскажите ,почему после конца файла считывается еще раз и записываются как 0 в оба массива? – Alpharius Oct 09 '19 at 20:28
  • 1
    Вот именно потому, что устроили цикл с предусловием eof. Это практически всегда ошибка. – AnT stands with Russia Oct 09 '19 at 20:33
  • @AnT А на что его правильно будет заменить? – Alpharius Oct 09 '19 at 20:35
  • Первый вопрос следует закрывать, как вызванный опечаткой, второй - как дубль для https://ru.stackoverflow.com/questions/833980/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8-%D0%BA%D0%BE%D0%BD%D1%86%D0%B0-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0 У кого там золото по С++ есть - закройте, а то я спросонок не туда попал, не тот дубль указал, пришлось переоткрывать, и теперь закрыть не могу... – Harry Oct 10 '19 at 04:15

1 Answers1

0
scanf("%fl %fl", &mX[i], &mY[i])

Реализуй считывание из файла с помощью scanf и по идее он сам будет переходить на новую строчку. Если данные будут записаны корректно: через пробел и по два числа - все заработает.

  • Вопрос с меткой C++, Ваше предложение C-style –  Oct 10 '19 at 20:10
  • функция scanf прекрасно работает и используется в c++, так что замечание странное – Митрофан Шевцов Oct 11 '19 at 13:44
  • то что она работает, это знают все. Но используя C++ надо использовать функционал С++. Для С есть extern “C” –  Oct 11 '19 at 14:09
  • scanf является частью функционала c++, никто не запрещает его использовать, меня за это еще ни разу не арестовали – Митрофан Шевцов Oct 12 '19 at 11:57
  • Нет, он является частью библиотеки языка Си и не является частью функционала языка C++. Просто с++ поддерживает функционал Си –  Oct 12 '19 at 12:01
  • Хорошо, скажу по-другому. Если c++ поддерживает функционал c, почему нельзя это использовать? Если c++ поддерживает эту библотеку, она априори становится частью функционала. – Митрофан Шевцов Oct 13 '19 at 13:28
  • А зачем ? Есть более гибкие инструменты c++, а если вы используете функционал си, он должен быть обернуть в extern –  Oct 13 '19 at 13:56