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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2014, 18:33   #1
Verax1
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 23
По умолчанию Функция на си

Здравствуйте! Написал код функции escape(s,t)(задание из учебника Брайна Керигана и Ритчи) в которой должна преобразовывать символы наподобие конца строки и табуляции в управляющие последовательности(такие как \n и \t) в процессе копирования строки t в строку s. Также необходимо использовать оператор switch. Но она не работает. заполняет строку только лишь первой буквой. Допустим если размер строки 100, а строка начинает с буквы 'v' то программа выводит v 100 раз.(возможны небольшие опечатки в коде, так как не знаю как скопировать с виртуальной машины текст) Вот код:

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

void escape(char s[], char t[]);
main()
{
       char s[100];
       char t[100];
       printf("write text");
       scanf("%s", s);
       escape(s,t);
       printf("%s",t);
}
void escape(char s[], char t[])
{
       int i,j;
       i=0;
       j=0;
       while (s[i]!='\0'){
               switch(s[i]){
               case '\n' :
                          t[j]='\\';
                          t[++j]='n';
                          j++;
                          break;
               case '\t' :
                          t[j]='\\';
                          t[++j]='t';
                          j++;
                          break;
               default:
                          t[j]=s[i];
                          j++;
                          break;
                i++;
                }
       t[j]='\0';/*не понимаю зачем это ставят */
       }
}

Последний раз редактировалось Verax1; 24.04.2014 в 19:36.
Verax1 вне форума Ответить с цитированием
Старый 24.04.2014, 23:46   #2
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

'\0' - символ конца строки
строка должна закачиваться символом \0
иначе будет выводится мусор (неинициализированные элементы массива)

пример:

Код:
	char s[100];
	int i=0;
        for( ;s[i]!='\n';)
	{
		if(i==0) scanf("%c",&s[i]);
		i++;
		scanf("%c",&s[i]);
	}
	s[i]='\0';
	printf("%s\n",s);
если будет без этой строчки s[i]='\0'; то после введенных символов тебе будет выводится мусор до конца границ(последний элемент) массива

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

void escape(char s[], char t[]);
void main()
{
       char s[100];
       char t[100];
       printf("write text");
       scanf("%s", s);
       escape(s,t);
       printf("%s",t);
}
void escape(char s[], char t[])
{
       int i,j;
       i=0;
       j=0;
       while (s[i]!='\0'){
               switch(s[i]){
               case '\n' :
                          t[j]='\\';
                          t[++j]='n';
                          j++;
                          break;
               case '\t' :
                          t[j]='\\';
                          t[++j]='t';
                          j++;
                          break;
               default:
                          t[j]=s[i];
                          j++;
                          break;
                }
                i++;
       t[j]='\0';/*не понимаю зачем это ставят */
       }
}
alekopoko вне форума Ответить с цитированием
Старый 26.04.2014, 19:49   #3
Verax1
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 23
По умолчанию

спасибо за обьяснение
Verax1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция ICMP Microsoft Office Excel 7 05.01.2014 02:11
qt функция tr() Pein95 Qt и кроссплатформенное программирование С/С++ 1 04.01.2014 15:09
Функция Now lu_una Общие вопросы Delphi 17 20.12.2012 13:36
C++.функция. savva Помощь студентам 8 05.07.2010 22:28
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50