C++ program help

Knight7770

Hippopotomonstrosesquiped aliophobia
Reaction score
187
I'm making a program that generates random acronyms based on the letters you want it to form. So far, I only have the basic stuff (not all the words have been added yet, nor all the grammar check stuff). However, there is a bug with the current grammar check implementation, which adds "ly" to the end of any adjective that comes before another adjective. However, instead of just adding one "ly", it adds 4 or 5.
What it should be:
Abbevillianly
Abdominal
Abating
Abbevillian
Abacus
What it is:
Abbevillianlylylyly
Abdominal
Abating
Abbevillian
Abacus

Here is the code so far (without all the variable declarations):
http://nopaste.dk/p358

a_noun, a_verb, and a_adj are all string variables.
 

enouwee

Non ex transverso sed deorsum
Reaction score
239
What a mess... I can't even figure out what that thing is supposed to do.

If you only want one "ly", put a break inside your conditional statement in edit_acronym().
 

Knight7770

Hippopotomonstrosesquiped aliophobia
Reaction score
187
That didn't fix it; the same thing still happens :confused:
 

enouwee

Non ex transverso sed deorsum
Reaction score
239
Mind posting your "fixed" code, so I can verify for myself that you added it to the wrong place?
 

enouwee

Non ex transverso sed deorsum
Reaction score
239
what's this supposed to do? :rolleyes:


Code:
void edit_acronym(std::string acronym[total_acronym_letters], int a[total_acronym_letters], int b)
{
  for(int x=0;x<b;x++)
  // ...
 

Knight7770

Hippopotomonstrosesquiped aliophobia
Reaction score
187
Edit: I got rid of it. Everything works now :thup:
 

enouwee

Non ex transverso sed deorsum
Reaction score
239
What a surprise ... you'd avoid such situations altogether by writing clean code. And avoid using global variables, wrong/insuccifient bound checks, uninitialized variables, etc.

If you're choosing C++, at least make use of classes. You don't need any global variables in that case.


Somewhat cleaned up. You have to add your Windows-specific stuff back.

Code:
#include <iostream>
#include <time.h>
//#include <conio.h>
#include <string>
#include <stdlib.h>
#include <ctype.h>

const int total_acronym_letters = 5;
std::string acronym[total_acronym_letters];

std::string a_noun[total_acronym_letters];
std::string a_verb[total_acronym_letters];
std::string a_adj[total_acronym_letters];
int pre_acronym[total_acronym_letters];
int part_speech[total_acronym_letters];

void create_acronym(std::string &acronym, int pos)
{
	std::string* source;

	if(acronym != "a")
	{
		std::cout<<"Error 23789: You have entered an incorrect character.\n";
//		_getch();
		return;
	}

	switch (part_speech[pos] = rand() % 3)
	{
		case 0:
			source = a_noun;
			break;
		case 1:
			source = a_verb;
			break;
		default:
			source = a_adj;
	}

	acronym = source[rand() % 3];
	if (pos > 0 && part_speech[pos - 1] == 2 && part_speech[pos] == 2)
	{
		acronym += "ly";
	}
}

void letter_a()
{
	//Nouns
	a_noun[0]="Aardvark";
	a_noun[1]="Aardwolf";
	a_noun[2]="Aba";
	a_noun[3]="Abaca";
	a_noun[4]="Abacus"; //pg 2
	//Verbs
	a_verb[0]="Abandoning";
	a_verb[1]="Abasing";
	a_verb[2]="Abashing";
	a_verb[3]="Abating";
	a_verb[4]="Abbreviating"; //pg 2
	//Adjectives
	a_adj[0]="Abandoned";
	a_adj[1]="Abaxial";
	a_adj[2]="Abbatial";
	a_adj[3]="Abbevillian";
	a_adj[4]="Abdominal"; //pg 2
}

//============================================================
int main(int argc, char** argv)
{
	int i;
	int acronym_length;
	char pre_acronym[total_acronym_letters] = {'\0'};

	std::cout<<"Welcome to Knight7770's Acronym Generator.\nHow many letters are there in your acronym?\nWARNING: Can be no more than "<<total_acronym_letters<<" letters!!\n";
	std::cin >> acronym_length;
	std::cout<<"Please enter the letters you would like to form your acronym\ni.e. USA or EU\n";

	if (acronym_length <= 0)
	{
		acronym_length = 1;
	}
	else if (acronym_length > 5)
	{
		acronym_length = 5;
	}

	letter_a();
	srand(time(NULL));

	for(i = 0; i < acronym_length; i++)
	{
		std::cin >> pre_acronym[i];
	}	
//	system("cls");

	for(i = 0; i < acronym_length; i++)
	{
		acronym[i] = tolower(pre_acronym[i]);
		create_acronym(acronym[i], i);
		std::cout << acronym[i] << "\n";
	}

//	_getch();

	return 0;
}
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top