Member 13474080 Ответов: 2

Как вывести определенное количество звездочек в программировании на языке Си?


Я хочу, чтобы компьютер проанализировал то, что я написал, и напечатал количество звездочек, соответствующее введенному числу. Я могу управлять только фрагментом кода, который может читать то, что я ввел. Я не могу использовать массивы, но могу использовать инструкции цикла, такие как jnz, и условные инструкции, такие как cmp.

Что я уже пробовал:

Это код, который я пробовал до сих пор:

код #include "файл stdafx.ч"
#include <stdlib.h>

void printChar(char c);
void printStr(char *strAddr);
void printInt(int someInt);

//**************************************************************************//
// Определены переменные. //
//**************************************************************************//
int numItems;
int *items; // указатель на элементы
инт элемент;

int wmain(int argc, _TCHAR* argv[])
{
items = (int *)malloc(1000);

numItems = 0;
делать
{
printf("введите элемент %d (0 означает конец данных): ", numItems + 1);
scanf("%d", &anItem);
предметы[numItems] = элемент;
numItems++;

} while (anItem != 0);

//**********************************************************************//
// В ассемблер. //
//**********************************************************************//
__ассемблер
{

отделка jmp

printNewLine:
нажмите '\r' // две строки, чтобы напечатать символ.
вызовите printChar

нажмите '\n' // две строки, чтобы напечатать еще один символ.
вызовите printChar

замачивать

finish: // ничего не делать
}

//**********************************************************************//
// Из ассемблера. //
//**********************************************************************//
printf("нажмите enter, чтобы выйти\n");
char dummy[10]; //на всякий случай несколько ключей в буфере
scanf("%c", манекен); //пауза.
scanf("%c", манекен); //пауза. И еще раз. Происходит что-то странное.
}



//**********************************************************************//
// Выводит один символ. //
// Нажмите символ, который будет напечатан в стеке; a First In Last Out //
// структура данных. Помните, что в отличие от C#, символ здесь имеет размер 1 байт. //
// //
// Parameters in: вставьте один символ в стек, как указано выше. //
// Вернет: Ничего. //
// Иные вопросы: Сохраняет ли он регистры процессора eax, ebx, ecx, edx, //
// esi, edi и т. д.? Без понятия (это приводит нас в "С", так что //
// предположим, что нет. //
//**********************************************************************//
void printChar(char c)
{
printf("%c", c); //%c означает как символ

} // мы не видим инструкцию "ret", если вы не просматриваете список ".cod"
// в папке "debug".



//**********************************************************************//
// Выведите целую строку, которая должна заканчиваться нулевым байтом. //
// он принимает один параметр, который является начальным адресом строки. //
//**********************************************************************//
void printStr(char *strAddr)
{
printf("%s", strAddr);
} // мы не видим инструкцию "ret", если вы не просматриваете список ".cod"
// в папке "debug".




//**********************************************************************//
// Выводит одно целое число . //
// Push целое число, которое будет напечатано в стеке; a First In Last Out //
// структура данных. Помните, что целое число здесь имеет размер 4 байта. //
// //
// Parameters in: вставьте одно целое число в стек, как указано выше. //
// Вернет: Ничего. //
// Иные вопросы: Сохраняет ли он регистры процессора eax, ebx, ecx, edx, //
// esi, edi и т. д.? Без понятия (это приводит нас в "С", так что //
// предположим, что нет. //
//**********************************************************************//
void printInt(int someInt)
{
printf("%d", someInt);
}

2 Ответов

Рейтинг:
4

Richard MacCutchan

for (i = 0; items[i] != 0; i++)     // for each entry in the array
{
    int j;
    for (j = 0; j < items[i]; j++)  // for the count in this item entry 
        printChar('*');             // print the number of stars
    printChar('\n');                // new line after the stars
}


Рейтинг:
2

Rick York

Во-первых, я вообще не вижу смысла использовать там asm. Все, что Вы делаете, можно сделать в C. На ваш вопрос, у вас есть цикл do-while, который получает данные и подсчитывает, сколько у вас есть. Почему вы не можете сделать еще один цикл do-while для вывода данных?

Еще одна вещь - у вас есть это помечено как unicode, но вы используете char везде. Я не вижу в этом ничего такого, что имело бы какое-либо отношение к юникоду.