2010-10-19 8 views
-1

Je veux imprimer un tableau de caractères, ces caractères sont d'abord soulignés. Ensuite, l'utilisateur peut écrire des caractères sur ces traits de soulignement. J'ai utilisé gotoxy() mais cela ne fonctionne pas correctement. C'est ce que je l'ai écrit:manipulation de chaîne dans C?

int main(void) 
{ 
    char arr[20]; 
    int i; 
    char ch; 
    clrscr(); 

    for(i=0;i<=20;i++) 
    { 
     textattr(0x07); 
     cprintf("_"); 
    } 

    do 
    { 
     for(i=0;i<=20;i++) 
     { 
      //gotoxy(i,0); 
      //ch = getche(); 
      if(isprint(ch) == 1) 
      { 
       arr[i] = ch; 
       gotoxy(i,0); 
       //printf("%c",ch); 
      } 
     } 
    } while(i == 20); 

    getch(); 
    return 0; 
} 
+2

Je serai heureux de répondre, mais s'il vous plaît nettoyer la démarque dans votre question. Quatre espaces avant chaque ligne de code. –

+0

Quel compilateur utilisez-vous? conio.h n'est pas bien supporté (voire pas du tout) si vous n'utilisez pas Borland, c'est peut-être pourquoi vous ne pouvez pas le faire fonctionner correctement? Avez-vous essayé des malédictions? – mingos

+0

J'utilise Borland C++ – noor

Répondre

0

La première chose est la suivante: Vous ne voulez probablement pas d'avoir tous ces appels à gotoxy, textattr et cprintf dans votre fonction principale, puisque ce n'est pas ce que la fonction principale est censé faire.

Il est beaucoup plus probable que la fonction principale ait pour but "de lire du texte de l'utilisateur, présenté correctement dans un champ de saisie". Vous devriez donc en faire une fonction:

static int 
nice_input_field(char *buf, size_t bufsize, int x, int y) { 
    int i, ch; 

    gotoxy(x, y); 
    for (i = 0; i < bufsize - 1; i++) { 
    cprintf("_"); 
    } 

    i = 0; 
    gotoxy(x, y); 
    while ((ch = readkey()) != EOF) { 
    switch (ch) { 

    case '...': /* ... */ 
     break; 

    case '\b': /* backspace */ 
     cprintf("_"); 
     i--; 
     gotoxy(x + i, y); 
     break; 

    case '\t': /* tabulator */ 
    case '\n': /* enter, return */ 
     buf[i] = '\0'; 
     return 0; /* ok */ 

    default: /* some hopefully printable character */ 
     if (i == bufsize - 1) { 
     cprintf("\a"); /* beep */ 
     } else { 
     buf[i++] = ch; 
     gotoxy(x + i, y); 
     cprintf("%c", buf[i]); 
     } 
    } 
    } 

    /* TODO: null-terminate the buffer */ 
    return 0; 
} 
0

Impression d'un tableau de caractères est assez facile:

char* str = your_array; 
while(*str) { 
    putc(*str++); 
} 

De mémoire qui doit imprimer une chaîne vers l'écran.

+0

Bien que je regarde votre code, je ne suis pas sûr de bien comprendre votre question. –

+0

quand je cours il doit y avoir des traits de soulignement déjà imprimés, le nombre de traits de soulignement est le non. d'éléments dans le tableau. Ensuite, le pointeur de l'écriture doit être au premier trait de soulignement et quand j'écris n'importe quel caractère, il sera écrit dans cette position exacte et stocké dans le tableau. – noor

+1

Oh, je vois ce que vous voulez. Et vous le faites dans le mauvais sens. Les malédictions ou les ncurses, comme suggéré ci-dessus, rendraient votre vie beaucoup plus facile. –

0

Votre code est très spécifique au DOS. Il n'y a pas de bonne solution générale au problème de la lecture immédiate de l'entrée de manière portable. On le demande assez souvent, donc je pense que la FAQ C est tombée en panne et a inclus une réponse que vous pourriez vouloir rechercher. Cela dit, je pense que votre bug est que gotoxy(1, 1) est le coin supérieur de l'écran, pas 0,0. Donc, vous voulez gotoxy(i, 1)