новичок в C и попытка чтения в текстовом файле «запасы», разделенные вертикальной линией '|' персонажи. Цель, чтобы открыть файл, который имеет значение строки и поплавок на каждой строке, в следующем формате:C чтение из вертикального символа с разделителем строк
TOM|149.62
JIM|23.25
Я прочитал другие сообщения о запятые, двоеточия и разделяющими символами табуляции, но «набор сканируемых символов» предложение применяется здесь как [^|]
между %s
и %f
, похоже, не работает. Кажется, мне удалось сохранить первый символ строки, по крайней мере, сейчас, но сохраненное значение поплавка является бессмысленным. Это позже будет записываться в массивы, объявленные после файла, но основной пример отображения строки и значения плавающего числа для каждой строки означает, что я могу продолжать самостоятельно. Цените любую помощь, которую вы можете мне дать.
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
// TOM|149.62
// JIM|23.25
int main()
{
FILE *stocks;
char *stock_Tickers[100];
float stock_Prices[100];
if ((stocks = fopen("Stocks.txt", "r")) == NULL)
{
fprintf(stderr, "Error opening file.\n");
exit(1);
}
char tempchar;
float tempfloat;
for (int i = 0; i < sizeof (stock_Tickers); i++)
{
if (feof(stocks))
{
break;
}
fscanf(stocks, "%s[^|]%f\n",&tempchar,&tempfloat);
cout << tempchar << " " << tempfloat;
cin.get();
}
return 0;
}
Обновление: @Michel Billaud Извините, но у меня есть одна последняя ошибка здесь. Ваш метод работал отлично, но когда я пытаюсь использовать этот небольшой вариант, он начинает печатать мусор на последней плавающей точке и разбивается на последующие петли. Посмотрел на локальные переменные, и последний массив просто не обновляется. Я думаю, что это связано с новой строкой, так как когда я изменяю float для целого числа, он все еще не работает. Можете ли вы понять, что я могу делать неправильно, поскольку мне кажется, что тот же формат? Формат на этот раз Ryan|B|IBM|100|176.10
. После этого все файлы читаются ... Спасибо.
FILE *trades;
// Ryan|B|IBM|100|176.10
// Ryan|S|IBM|50|177.10
char trade_User[100][20];
char trade_Type[100];
char trade_Tickers[100][4];
int trade_Quantity[100];
float trade_Prices[100];
int trade_Count = 0;
if ((trades = fopen("Trades.txt","r")) == NULL)
{
fprintf(stderr, "Error opening file.\n");
exit(1);
}
for (int i = 0; i < sizeof(trade_Tickers); i++)
{
if (feof(trades))
{
break;
}
fscanf(trades, "%19[^|]|%1[^|]|%4[^|]|%d[^|]|%f\n",
&trade_User[i], &trade_Type[i], &trade_Tickers[i], &trade_Quantity[i], &trade_Prices[i]);
printf("%s %c %s %d %f\n",
trade_User[i], trade_Type[i], trade_Tickers[i], trade_Quantity[i], trade_Prices[i]);
trade_Count++;
}
'char tempchar;' -> 'char tempchar [32];' .. 'fscanf (запасы,% 31 [^ |] |% f \ n", tempchar и tempfloat); ' – BLUEPIXY
C или C++ ? Вы говорите C, но ваш код явно находится на C++. –
Кроме того, в C++ вы должны использовать '' и' '. Заголовки, которые вы используете, предназначены только для C. –