реклама на сайте
подробности

 
 
> printf, напечатать массив символов
Метценгерштейн
сообщение Nov 14 2014, 23:30
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



что-то не получается.
есть массив char, содержит 5 символов. никакого завершающего нуля нет.
как мне его напечатать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Nov 17 2014, 18:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



давайте разбираться.
переменная z1.
Я ее объявляю типом int. Не хочу ее прямо там инициализировать. Почему нет? Инициализирую, когда мне это надо. Что здесь не так?

по второму замечанию - условие задачи- слова разделенные запятыми, но слово не больше 5 букв. Так что, если нет второй запятой, то из цикла выйдет и так.

за && - спасибо. Учту. А можно подробней разницу? Т.к. на практике работает и так и так.

библиотечной ф-ей по условию пользоваться нельзя было. Пришлось городить.

В целом, за критику спасибо)
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 17 2014, 19:17
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Метценгерштейн @ Nov 17 2014, 21:08) *
давайте разбираться.
переменная z1.
Я ее объявляю типом int. Не хочу ее прямо там инициализировать. Почему нет? Инициализирую, когда мне это надо. Что здесь не так?


Предположим, что первый байт в строке равен 100. Вы входите в цикл
for (int i = 0; i < sizeof(str); i++)
и условие
if (str[i] == ',') z1 = i; // запомнили где запятая (начало слова)
у вас, естественно, не выполняется, т.к. код 100 это не запятая,
а следовательно, переменная z1 так и остается неинициализированной.
Но на этом нулевой цикл по i не закончился, а продолжается дальше.
Входим в условие
if ((str[i] >= 97) & (str[i] <= 122))
и обнаруживаем, что оно верно, т.к. 100 где-то между 97 и 122. А потому входим во второй цикл
for (int f = 0; f < 5; f++)
где на каждом обороте требутся проверить условие
if ((str[(z1 + 1 + f)]) == ',') // дошли до второй запятой
с котором фигурует символ
str[(z1 + 1 + f)]),
доставаемый по вычисляемому индексу
z1 + 1 + f
А как его вычислять, если z1 до сих пор неинициализирована?
Напоминаю, что мы всё еще находимся в состоянии, когда
i==0, f==0, str[0]==100,
а z1==неопределена, т.к. запятой еще не было.
Потом цикл по f попрет дальше до 5, заставляя лазить в память
str[(z1 + 1 + f)]),
где z1 по-прежнему неинициализирована. А поскольку условие
if ((str[(z1 + 1 + f)]) == ',') // дошли до второй запятой
в запредельной памяти он едва ли найдет, то цикл f на каждом своем обороте будет распечатывать это:
char c = str[(z1 + 1 + f)];
printf("%c", c);
где переменная "c" копирует в себя значение из массива с больным индексом.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Метценгерштейн   printf   Nov 14 2014, 23:30
- - Xenia   Цитата(Метценгерштейн @ Nov 15 2014, 02:3...   Nov 14 2014, 23:37
|- - alx.bilous   Цитата(Xenia @ Nov 15 2014, 02:37) Как ст...   Nov 24 2014, 11:09
|- - Xenia   Цитата(alx.bilous @ Nov 24 2014, 14:09) p...   Nov 24 2014, 12:00
- - Метценгерштейн   а если у меня массив символов не всегда 5, а может...   Nov 14 2014, 23:51
|- - Xenia   Цитата(Метценгерштейн @ Nov 15 2014, 02:5...   Nov 15 2014, 00:11
|- - ViKo   Цитата(Метценгерштейн @ Nov 15 2014, 02:5...   Nov 15 2014, 10:13
- - Метценгерштейн   Код#include <math.h> #include "stdafx....   Nov 15 2014, 09:52
|- - l1l1l1   Цитата(Метценгерштейн @ Nov 15 2014, 12:5...   Nov 15 2014, 10:52
|- - Xenia   Цитата(Метценгерштейн @ Nov 15 2014, 12:5...   Nov 15 2014, 16:08
|- - doom13   Цитата(Метценгерштейн @ Nov 17 2014, 21:0...   Nov 17 2014, 18:23
- - Метценгерштейн   да, Вы правы. Упустил из виду что первый символ мо...   Nov 17 2014, 19:58
|- - Xenia   Цитата(Метценгерштейн @ Nov 17 2014, 22:5...   Nov 17 2014, 21:38
- - Метценгерштейн   в целом да, согласен. Насчет 97 и 'a'- дав...   Nov 18 2014, 09:19
|- - Xenia   Цитата(Метценгерштейн @ Nov 18 2014, 12:1...   Nov 18 2014, 15:59
- - alx.bilous   гцц понимает, keil понимает, аврка понимает, iar ...   Nov 24 2014, 12:24


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 15:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01305 секунд с 7
ELECTRONIX ©2004-2016