Avatar billede snuseren.dk Nybegynder
06. juni 2003 - 17:47 Der er 9 kommentarer og
1 løsning

Afslutter programmet

Hey

Jeg har et program, der oversætter bogstaver til tegn.
Jeg har en start menu, hvor man kan vælge om man vil lave bogstaver om til tegn, og om man vil lave tegn om til bogstaver. ( a) og b) ).

Men hvis man så taster a, så man vælger "oversætte bogstaver til tegn", kommer der bare den der tekst "Tryk på en vilkårlig tast for at fortsætte", og der vil jeg jo gerne have at man kan taste en sætning.Det er Console mode, og compileren er Dev-CPP.
Det virker fint, hvis jeg bruger cin som input, men den kan kun indeholde et ord, og altså ikke hele sætninger :-/

Koden ser sådan ud:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;

void replace(char *s,char *s1,char *s2)
{
  int i,j;
  char *tmp;
  tmp = (char*)malloc(strlen(s)+1);
  strcpy(tmp,s);
  i = 0;
  j = 0;
  while(i<strlen(tmp)) {
      if(strncmp(tmp+i,s1,strlen(s1))==0) {
        strcpy(s+j,s2);
        i=i+strlen(s1);
        j=j+strlen(s2);
      } else {
        s[j]=tmp[i];
        i++;
        j++;
      }
  }
  s[j] = '\0';
  free(tmp);
  return;
}

void a()
{
  char line[100];
  printf("Enter: ");
  gets(line);
  replace(line, "a", "!");
  replace(line, "b", "#");
  replace(line, "c", "¤");
  replace(line, "d", "%");
  replace(line, "e", "&");
  replace(line, "f", "/");
  replace(line, "g", "(");
  replace(line, "h", ")");
  replace(line, "i", "=");
  replace(line, "j", "+");
  replace(line, "k", "?");
  replace(line, "l", "´");
  replace(line, "m", "`");
  replace(line, "n", "|");
  replace(line, "o", "@");
  replace(line, "p", "£");
  replace(line, "q", "$");
  replace(line, "r", "{");
  replace(line, "s", "[");
  replace(line, "t", "]");
  replace(line, "u", "}");
  replace(line, "v", "¨");
  replace(line, "w", "^");
  replace(line, "x", "~");
  replace(line, "y", "'");
  replace(line, "z", "*");
  replace(line, " ", "<");
  printf("%s\n",line);
  system("PAUSE");
}

void b() {
  char line2[100];
  printf("Enter: ");
  gets(line2);
  replace(line2, "!", "a");
  replace(line2, "#", "b");
  replace(line2, "¤", "c");
  replace(line2, "%", "d");
  replace(line2, "&", "e");
  replace(line2, "/", "f");
  replace(line2, "(", "g");
  replace(line2, ")", "h");
  replace(line2, "=", "i");
  replace(line2, "+", "j");
  replace(line2, "?", "k");
  replace(line2, "´", "l");
  replace(line2, "`", "m");
  replace(line2, "|", "n");
  replace(line2, "@", "o");
  replace(line2, "£", "p");
  replace(line2, "$", "q");
  replace(line2, "{", "r");
  replace(line2, "[", "s");
  replace(line2, "]", "t");
  replace(line2, "}", "u");
  replace(line2, "¨", "v");
  replace(line2, "^", "w");
  replace(line2, "~", "x");
  replace(line2, "'", "y");
  replace(line2, "*", "z");
  printf("%s\n",line2);
}

int main()
{
  char valg;

  cout << "Hvad vil du foretage dig:";
  cout << "\n\n";
  cout << "    a) Overs\x91tte til kodesprog\n";
  cout << "    b) Overs\x91tte kodesprog til bogstaver\n";
  cout << "    c) Hj\x91lp\n";
 
  cin >> valg;
 
  if (valg == 'a') {
a();
}else if (valg == 'b') {
b();
}
  system("PAUSE");
  return 0;
}

På forhånd tak :o)

MVH
Anders
Avatar billede arne_v Ekspert
06. juni 2003 - 18:15 #1
Det kan ofte være problematisk at mixe forskellige former for input
funktioner så enten cin eller gets.
Avatar billede arne_v Ekspert
06. juni 2003 - 18:16 #2
Følgende virker:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void replace(char *s,char *s1,char *s2)
{
  int i,j;
  char *tmp;
  tmp = (char*)malloc(strlen(s)+1);
  strcpy(tmp,s);
  i = 0;
  j = 0;
  while(i<strlen(tmp)) {
      if(strncmp(tmp+i,s1,strlen(s1))==0) {
        strcpy(s+j,s2);
        i=i+strlen(s1);
        j=j+strlen(s2);
      } else {
        s[j]=tmp[i];
        i++;
        j++;
      }
  }
  s[j] = '\0';
  free(tmp);
  return;
}

void a()
{
  char line[100];
  printf("Enter: ");
  gets(line);
  replace(line, "a", "!");
  replace(line, "b", "#");
  replace(line, "c", "¤");
  replace(line, "d", "%");
  replace(line, "e", "&");
  replace(line, "f", "/");
  replace(line, "g", "(");
  replace(line, "h", ")");
  replace(line, "i", "=");
  replace(line, "j", "+");
  replace(line, "k", "?");
  replace(line, "l", "´");
  replace(line, "m", "`");
  replace(line, "n", "|");
  replace(line, "o", "@");
  replace(line, "p", "£");
  replace(line, "q", "$");
  replace(line, "r", "{");
  replace(line, "s", "[");
  replace(line, "t", "]");
  replace(line, "u", "}");
  replace(line, "v", "¨");
  replace(line, "w", "^");
  replace(line, "x", "~");
  replace(line, "y", "'");
  replace(line, "z", "*");
  replace(line, " ", "<");
  printf("%s\n",line);
  system("PAUSE");
}

void b() {
  char line2[100];
  printf("Enter: ");
  gets(line2);
  replace(line2, "!", "a");
  replace(line2, "#", "b");
  replace(line2, "¤", "c");
  replace(line2, "%", "d");
  replace(line2, "&", "e");
  replace(line2, "/", "f");
  replace(line2, "(", "g");
  replace(line2, ")", "h");
  replace(line2, "=", "i");
  replace(line2, "+", "j");
  replace(line2, "?", "k");
  replace(line2, "´", "l");
  replace(line2, "`", "m");
  replace(line2, "|", "n");
  replace(line2, "@", "o");
  replace(line2, "£", "p");
  replace(line2, "$", "q");
  replace(line2, "{", "r");
  replace(line2, "[", "s");
  replace(line2, "]", "t");
  replace(line2, "}", "u");
  replace(line2, "¨", "v");
  replace(line2, "^", "w");
  replace(line2, "~", "x");
  replace(line2, "'", "y");
  replace(line2, "*", "z");
  printf("%s\n",line2);
}

int main()
{
  char valg[2];

  printf("Hvad vil du foretage dig:");
  printf("\n\n");
  printf("    a) Overs\x91tte til kodesprog\n");
  printf("    b) Overs\x91tte kodesprog til bogstaver\n");
  printf("    c) Hj\x91lp\n");

  gets(valg);

  if (valg[0] == 'a') {
a();
}else if (valg[0] == 'b') {
b();
}
  system("PAUSE");
  return 0;
}
Avatar billede arne_v Ekspert
06. juni 2003 - 18:20 #3
Eller:

#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;

void replace(char *s,char *s1,char *s2)
{
  int i,j;
  char *tmp;
  tmp = (char*)malloc(strlen(s)+1);
  strcpy(tmp,s);
  i = 0;
  j = 0;
  while(i<strlen(tmp)) {
      if(strncmp(tmp+i,s1,strlen(s1))==0) {
        strcpy(s+j,s2);
        i=i+strlen(s1);
        j=j+strlen(s2);
      } else {
        s[j]=tmp[i];
        i++;
        j++;
      }
  }
  s[j] = '\0';
  free(tmp);
  return;
}

void a()
{
  char line[100];
  cout << "Enter: ";
  cin.getline(line,sizeof(line));
  replace(line, "a", "!");
  replace(line, "b", "#");
  replace(line, "c", "¤");
  replace(line, "d", "%");
  replace(line, "e", "&");
  replace(line, "f", "/");
  replace(line, "g", "(");
  replace(line, "h", ")");
  replace(line, "i", "=");
  replace(line, "j", "+");
  replace(line, "k", "?");
  replace(line, "l", "´");
  replace(line, "m", "`");
  replace(line, "n", "|");
  replace(line, "o", "@");
  replace(line, "p", "£");
  replace(line, "q", "$");
  replace(line, "r", "{");
  replace(line, "s", "[");
  replace(line, "t", "]");
  replace(line, "u", "}");
  replace(line, "v", "¨");
  replace(line, "w", "^");
  replace(line, "x", "~");
  replace(line, "y", "'");
  replace(line, "z", "*");
  replace(line, " ", "<");
  printf("%s\n",line);
  system("PAUSE");
}

void b() {
  char line2[100];
  cout << "Enter: ";
  cin.getline(line2,sizeof(line2));
  replace(line2, "!", "a");
  replace(line2, "#", "b");
  replace(line2, "¤", "c");
  replace(line2, "%", "d");
  replace(line2, "&", "e");
  replace(line2, "/", "f");
  replace(line2, "(", "g");
  replace(line2, ")", "h");
  replace(line2, "=", "i");
  replace(line2, "+", "j");
  replace(line2, "?", "k");
  replace(line2, "´", "l");
  replace(line2, "`", "m");
  replace(line2, "|", "n");
  replace(line2, "@", "o");
  replace(line2, "£", "p");
  replace(line2, "$", "q");
  replace(line2, "{", "r");
  replace(line2, "[", "s");
  replace(line2, "]", "t");
  replace(line2, "}", "u");
  replace(line2, "¨", "v");
  replace(line2, "^", "w");
  replace(line2, "~", "x");
  replace(line2, "'", "y");
  replace(line2, "*", "z");
  printf("%s\n",line2);
}

int main()
{
  char valg[2];

  cout << "Hvad vil du foretage dig:";
  cout << "\n\n";
  cout << "    a) Overs\x91tte til kodesprog\n";
  cout << "    b) Overs\x91tte kodesprog til bogstaver\n";
  cout << "    c) Hj\x91lp\n";

  cin.getline(valg,sizeof(valg));

  if (valg[0] == 'a') {
a();
}else if (valg[0] == 'b') {
b();
}
  system("PAUSE");
  return 0;
}
Avatar billede snuseren.dk Nybegynder
06. juni 2003 - 19:12 #4
Jeg takker mange gange!!

Kan du ik ligge et svar??
Avatar billede arne_v Ekspert
06. juni 2003 - 19:13 #5
svar
Avatar billede snuseren.dk Nybegynder
06. juni 2003 - 19:14 #6
Har du ik tilfældigvis en copy and paste funktion, som virker i console mode? Altså sådan man kan trykke Ctrl + V, og så indsætter den.. Det virker nemlig ik. Man kan godt kopiere via ctrl + c, men ikke indsætte via ctrl + v.
Avatar billede arne_v Ekspert
06. juni 2003 - 19:18 #7
Den tror jeg er svær i et console program.

Og jeg har ikke noget.

Men jeg kan godt prøve at kigge efter noget.
Avatar billede snuseren.dk Nybegynder
06. juni 2003 - 19:28 #8
Jeg takker.. Du skal nok få flere points hvis du finder det :o)
Avatar billede bertelbrander Novice
06. juni 2003 - 20:53 #9
Her er en lille kode-stup der indsætter fra klipboardet:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

int main(void)
{
  char *s;
  HANDLE handle;

  if(!OpenClipboard(NULL))
  {
    printf("Failed to open clipboard!\n");
    return EXIT_FAILURE;
  }
  if((handle = GetClipboardData(CF_TEXT)) == 0)
  {
    printf("Failed to get clipboard data!\n");
    CloseClipboard();
    return EXIT_FAILURE;
  }
  if((s = (char *)GlobalLock(handle)) == NULL)
  {
    printf("Failed to lock clipboard data!\n");
    CloseClipboard();
    return EXIT_FAILURE;
  }
  printf("Clipboard data: %s\n", s);
  CloseClipboard();

  return 0;
}
Avatar billede snuseren.dk Nybegynder
06. juni 2003 - 21:22 #10
Bertel-Brander ->> Jeg takker, jeg kan desværre først teste det imorgen, men hvis det virker, får du points..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester