как распечатать x количество результатов в строке - PullRequest
1 голос
/ 22 сентября 2011

Для этого кода, который я создал и который выводит символы ASCII, соответствующие int с, мне нужно распечатать 16 ASCII на строку.Как бы я поступил так?Я не уверен, как подойти к ним?Создаю ли я еще один for цикл внутри?

int main()
{
    int x = 0;

    for (int i = 0; i <= 127; i++)
    {
        int x = i;
        char y = (char) x;
        cout << y;
    }

    return 0;
}

Или я должен поставить cout снаружи с 16 отдельными строками?Я пытаюсь напечатать 17 ASCII, начиная с 1 подряд.

Ответы [ 5 ]

1 голос
/ 22 сентября 2011
int main()
{
 int charsThisLine =0;
 for (int currentChar=0; currentChar<128; currentChar++)
 {
  if(charsThisLine==16)
  {
   cout<<endl;
   charsThisLine = 0;
  }
  else
  {
   cout<<(char)currentChar;
   charsThisLine++;
  }
 }
}
1 голос
/ 22 сентября 2011

Вам не нужна другая переменная для отслеживания.i уже является int.

, поэтому if i modulo 16 equals 0 then print a newline else print (char)i

EDIT:

Обратите внимание, что используются переменные типа i подходит для простой итерации, но всегда лучше называть их лучше.Так что подумайте о том, как изменение i на ascii в вашей программе улучшает читабельность.Это мгновенно делает еще более ясным, что вы пытаетесь сделать здесь.

1 голос
/ 22 сентября 2011

Да, вам нужен второй цикл внутри первого. (Я неправильно понял, что запрашивается.)

Вам также необходимо очистить код.Первый x не используется;второй x не нужен, так как вы могли бы прекрасно использовать char y = (char)i; (и приведение не является обязательным).Обычно вы должны использовать цикл for (int i = 0; i < 128; i++) с условием < вместо <=.

Вам также необходимо где-то сгенерировать новую строку (cout << endl; или cout << '\n';).Вам нужно будет иметь дело с управляющими символами, такими как '\n' и '\f'?

Наконец, я не уверен, что «аськис» - это термин, который я видел раньше;нормальный термин будет «символы ASCII».

1 голос
/ 22 сентября 2011

Как насчет:

#include <iostream>

int main()
{
    for(int i = 0, j = 0; i < 128; ++i, ++j)
    {
        if(j == 16)
        {
            j = 0;
            std::cout << std::endl;
        }

        std::cout << static_cast<char>(i);
    }

    return 0;
}

На каждой итерации j увеличивается на 1;после 16 итераций j сбрасывается в 0 и печатается новая строка.


В качестве альтернативы, как указывает @Sujoy, вы можете использовать:

if((i % 16) == 0)
    std::cout << std::endl;

Но это приводит к проблеме печати дополнительного символа новой строки в начале вывода.

1 голос
/ 22 сентября 2011

Используйте другую переменную, которая считает вместе с i.Когда он достигнет 16, сбросьте его и напечатайте новую строку.Повторяйте до тех пор, пока цикл не прекратится.

т.е.можно просто проверить if (i % 16 == 0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...