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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 19:47   #1
Землянин
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 30
Вопрос Язык Си. Случайные символы в строках.

Доброго времени суток, господа. Имеется текстовый файл, в котором есть только одна строка mystr и в ней содержатся символы 1.5;5;-3; Считая символ ";" разделителем, необходимо в отдельности показать каждую цифру. Я написал следующий код:
Код:
int main()
{

	char name[20], mystr[100],mystra[10],mystrb[10],mystrc[10];
        int ii,i,j,k;
        printf("\nVvedite imya fayla i put6 ");
	scanf("%s",name);

		FILE *inp_file;
		inp_file=fopen(name,"r");
		fscanf(inp_file,"%s",&mystr); //считал массив символов
		ii=0;i=0;j=0;k=0;
		do {
		   mystra[i]=mystr[ii]; //заполняю массив mystra пока не встречу символ ";"
		   ii++;i++;
		   }while(mystr[ii]!=';');
		   printf("\na = %s ",mystra); //вывожу на экран получившийся массив
		   ii++; //пропускаю ячейку с символом ";"
		
                 do {
		   mystrb[j]=mystr[ii]; //заполняю массив mystrb пока не встречу символ ";"
		   ii++;j++;
		   }while(mystr[ii]!=';');
		   printf("\nb = %s ",mystrb);//вывожу на экран получившийся массив
		   ii++; //пропускаю ячейку с символом ";"

		do {
		   mystrc[k]=mystr[ii]; //заполняю массив mystrc пока не встречу символ ";"
		   ii++;k++;
		   }while(mystr[ii]!=';');
		printf("\nc = %s ",mystrc);//вывожу на экран получившийся массив
fclose(inp_file);
getch();
return 0;
}
В итоге первую цифру я получаю без проблем, но в остальном вижу мусор символов. Вывод в консоли a=1.5
b=#%&^ или что-то в этом роде
c=&^%* или что-то в этом роде
Подскажите, почему я не могу увидеть остальные символы? Буду очень благодарен. Помогите, ребята разобраться.
Землянин вне форума Ответить с цитированием
Старый 04.05.2012, 21:36   #2
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>

int main( void ){
    const int SIZE = 20;
    char file_name[SIZE];
    int ch;
    FILE *inp_file;

    printf ("Enter file name: ");
    fgets(file_name, SIZE, stdin);

    if ( inp_file = fopen(file_name, "r") ){
        while ( ch = fgetc(inp_file) != EOF )
            putchar( (ch == ';') ? '\n' : ch );
        putchar('\n');
    }else  perror("error opening file\n");

    fclose(inp_file);

    system("pause");

    return 0;
}

Последний раз редактировалось ERAGORN; 05.05.2012 в 00:30.
ERAGORN вне форума Ответить с цитированием
Старый 04.05.2012, 22:49   #3
Землянин
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 30
По умолчанию

Ммм, что-то не так, она не распознает то, что написано в файле. Или я поторопился с выводом и это только часть данной программы, которую надо по усмотрению изменить и применить к общей проге?
Землянин вне форума Ответить с цитированием
Старый 05.05.2012, 02:53   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Вот так попробуй.
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	char name[100], mystr[100];
	printf("\nInput filename\n");
	scanf("%s", name);
	FILE *inp_file = fopen(name, "r");
	fscanf(inp_file, "%s", &mystr); 
	char * token = strtok(mystr,";\t\n");
	char iter = 'a';
	while(token)
	{
		printf("%C = %s\n", iter++, token);
		token = strtok(0, ";\t\n");
	}
	fclose(inp_file);
	system("pause");
	return 0;
}
В твоем же варианте куча бессмыленных циклов, и выход за пределы массива.
EUGY вне форума Ответить с цитированием
Старый 05.05.2012, 13:42   #5
Землянин
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 30
По умолчанию

Что-то не так. В файле три константы. Не распознавая их, программа выдает на экран:
Код:
%С=%s
%С=%s
%С=%s
Я имел в виду, что на экране после прочтения файла со строкой 1.5;5;-5.1; программа выдаст:
Код:
a=1.5
b=5
c=-5.1
В своем коде я пытался сделать так...
Землянин вне форума Ответить с цитированием
Старый 06.05.2012, 14:57   #6
Землянин
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 30
По умолчанию

Ребят, как не кручу, не выходит. Как поступить?
Землянин вне форума Ответить с цитированием
Старый 06.05.2012, 17:54   #7
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

А попробуй убрать символ & из строки:
fscanf(inp_file, "%s", &mystr);
в коде привиденном EUGY.

Немного изменил код:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main( void ){
    const int SIZE = 20;
    char file_name[SIZE];
    int ch;
    char iter;
    int len;
    FILE *inp_file;

    printf ("Enter file name: ");
    fgets(file_name, SIZE, stdin);

    len = strlen(file_name);
    if ( file_name[len-1] == '\n') file_name[len-1] = '\0';

    if ( inp_file = fopen(file_name, "r") ){
        iter = 'a';
        printf("%c = ", iter);
        while ( ch = fgetc(inp_file) != EOF )
            if ( ch == ';' ) printf("\n%c = ", ++iter);
            else putchar(ch);
        fclose(inp_file);
        putchar('\n');
    }else  perror("error opening file\n");


    system("pause");

    return 0;
}

Последний раз редактировалось ERAGORN; 07.05.2012 в 03:32. Причина: добавление кода
ERAGORN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайные числа Toa Microsoft Office Excel 6 30.11.2013 18:45
Случайные числа bogdan333 C++ Builder 9 12.04.2012 13:48
Даны натуральное число n и символы s1,...,sn. Получите все символы, расположенные до первого двоеточия (Pascal) Татьана Помощь студентам 16 22.09.2011 15:05
Случайные чила Алексей_xXx Помощь студентам 13 07.05.2009 20:21
СИМВОЛЫ - помогите решить задачу на символы kiko Паскаль, Turbo Pascal, PascalABC.NET 5 30.11.2008 16:09