Member 13786151 Ответов: 1

Я хотел бы спросить, как я собираюсь добавить функцию повтора, как только я нажму "Y"


// TMA2Q3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "string.h"


int main() {
	int maxNumber = 0;

	printf("Prepared by Name and ID: 12345 \n");
	printf("Class: 3SPG1 \n");
	printf("This program takes in a set of numbers and performs sorting and indexing. \n");
	printf("Please key in how many numbers you want to sort(max.20): ");
	scanf_s("%d", &maxNumber);

	int *aryNumbers = NULL;
	int *sortedIndex = NULL;
	int *sortedNumbers = NULL;
	aryNumbers = realloc(aryNumbers, maxNumber);
	sortedIndex = realloc(sortedIndex, maxNumber);
	sortedNumbers = realloc(sortedNumbers, maxNumber);

	for (int i = 1; i <= maxNumber; i++) {
		char y[2];
		itoa(i, y, 10);
		printf("Key in number #%s: ", &y);
		scanf_s("%d", &aryNumbers[i - 1]);
		sortedNumbers[i - 1] = aryNumbers[i - 1];
	}

	printf("The original order of the numbers are: ");
	for (int i = 0; i < maxNumber; i++) {
		char z[2];
		itoa(aryNumbers[i], z, 10);
		printf("%s ", &z);
	}

	//perform sorting and assign
	int index;
	for (int i = 0; i < maxNumber; i++) {
		sortedIndex[i] = i + 1;
		for (int j = 0; j < maxNumber; j++) {
			if (sortedNumbers[j] > sortedNumbers[i]) {
				int temp = sortedNumbers[j];
				sortedNumbers[j] = sortedNumbers[i];
				sortedNumbers[i] = temp;
				sortedIndex[i] = j + 1;
			}
		}
	}

	printf("\nThe sorted numbers are: ");
	for (int i = 0; i < maxNumber; i++) {
		char z[2];
		itoa(sortedNumbers[i], z, 10);
		printf("%s ", &z);
	}

	//find sorted index
	for (int i = 0; i < maxNumber; i++) {
		for (int j = 0; j < maxNumber; j++) {
			if (aryNumbers[i] == sortedNumbers[j]) {
				sortedIndex[i] = j + 1;
			}
		}
	}

	for (int i = 0; i < maxNumber; i++) {
		char a[2];
		char b[2];
		char c[2];
		itoa(i + 1, a, 10);
		itoa(aryNumbers[i], b, 10);
		itoa(sortedIndex[i], c, 10);
		printf("\nThe index for number #%s (%s) is %s", &a, &b, &c);
	}
	printf("\nDo you want to repeat the program?(Y/N): ");

	char input;
	scanf_s("%d", &input);

	return 0;
}


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

У меня было исследование из интернета, его просят использовать в то время как...цикл, я пробовал несколько раз, он не может работать...нужна помощь и Совет. Большое спасибо.

Patrice T

- Я пробовал несколько раз, но это не сработает.
Покажи как ты старался

1 Ответов

Рейтинг:
1

OriginalGriff

Совет, который вы нашли, верен: используйте while или do...while петля.
Поставьте один круг вокруг всего кода, который вы хотите повторить, и он будет работать:

char[100] inp;
do
   {
   ... your code here ...
   scanf("%s", inp);
   } while (inp[0] == 'y' || inp[0] == 'Y');
return 0;



Цитата:
Так что извините, босс, у меня 0 знаний по программированию.
Это действительно трудно для меня, я не понимаю, как во время цикла работы.
Надеюсь, вы сможете мне помочь. Спасибо


Один while петли очень просто:
while (a)
   {
   b;
   }
c;
1) Если условие a если значение равно true, войдите в цикл.
1.1) выполнить заявление или заявления b
1.2) вернулся к тесту в точке (1)
2) Если условие a было ложным, выполнение c вместо.

Существует также do ... while версия, которая выполняет цикл хотя бы один раз:
do
   {
   b;
   } while (a);
c;
1) выполнить заявление или заявления b
2) Если условие a вычисляется значение true, цикл возвращается к (1)
3) в противном случае выполните c вместо.

Все это есть в документации ...


Member 13786151

Привет Босс, я понятия не имею, какую часть кода мне нужно поставить? Ты можешь меня научить? Спасибо

OriginalGriff

Какая часть "поставить один вокруг всего кода, который вы хотите повторить" является трудной для вас?

Member 13786151

Так что извините, босс, у меня 0 знаний по программированию.
Это действительно трудно для меня, я не понимаю, как во время цикла работы.
Надеюсь, вы сможете мне помочь. Спасибо

OriginalGriff

Ответ обновлен

Member 13786151

Привет, босс, нужна помощь.
Я уже пробовал это сделать, но потом получил соответствующую ошибку


вход char;
делать
{
printf("пожалуйста, введите, сколько чисел вы хотите отсортировать(макс. 20): ");
scanf_s("%d", &maxNumber);

printf("\nDo вы хотите повторить программу?(Y/N): ");
scanf_s("%s", &input);
} while (input[0] == 'y' || input[0] == 'Y');


возвращает 0;




Описание Кода Серьезности Состояние Подавления Строки Файла Проекта
Ошибка C2109 для подстрочного индекса требуется массив или указатель типа ConsoleApplication4 c:\users\1000218684\documents\visual studio 2015\projects\consoleapplication4\consoleapplication4\consoleapplication4.c 87
Описание Кода Серьезности Состояние Подавления Строки Файла Проекта
Выражение Error (active) должно иметь указатель на объект типа ConsoleApplication4 c:\Users\1000218684\Documents\Visual Studio 2015\Projects\ConsoleApplication4\ConsoleApplication4\ConsoleApplication4.c 90

OriginalGriff

Может быть, мой исходный код взял адрес массива?
char []-это указатель на символ, &(char [])-это точка-указатель на символ.