2010-07-24 8 views
4

Cette question m'a été posée récemment lors d'une de mes interviews avec un MNC. La question étaitOutil Texte défilant en C

"Nous avons besoin d'afficher un écran dans lequel un texte défile en bas de l'écran et l'écran restant est vide Comment faire cela dans C? Quelles structures de données utiliseriez-vous? ?? "

Des idées s'il vous plaît ...!

+3

Horizontalement ou verticalement? Texte fixe ou texte continuellement changeant? Bibliothèque ISO C uniquement ou une API de console spécifique? Est-ce même une question de console ou une interface graphique? Plus de contexte requis peut-être. – Clifford

+2

Cette question est mal définie et presque impossible à répondre sans un certain contexte, comme le type d'environnement UI dans lequel le programme s'exécute (Unix, Windows, Curses?). Je serais quelque peu surpris de trouver ce genre de question sur le répertoire d'entrevue d'une grande société. –

+2

Oui, c'est une bonne question, car une partie de l'entrevue pourrait être de déterminer la capacité du candidat à interagir avec les utilisateurs de l'entreprise pour aider à clarifier les exigences,! répondre à la question ... – pascal

Répondre

2

En supposant qu'il s'agit d'une application console, vous pouvez imprimer de nouvelles lignes 24 fois, ce qui vous place en bas.

La chaîne à imprimer est stockée sur un tableau/vecteur de taille fixe de 81 caractères (\ 0 terminé à la position 81), qui est mis à jour par une routine d'alimentation. Cela peut potentiellement provenir d'une socket, dactylographie, fichier, processus d'appel, etc ...

Au moment de l'alimentation (rappels de minuterie, lorsque le fichier change, tampon de socket non vide, peu importe), vous devez ensuite faire pivoter le texte char à la fois. En supposant que la rotation est de droite à gauche, copiez tous les caractères de 1 (pas 0) jusqu'à 80 à i-1 position précédente. Écrivez le nouveau caractère à la position 80.

L'astuce graphique clé ici serait de terminer votre printf avec \ r au lieu de \ n. \ r est un modificateur pour chariot de retour: le curseur revient à la colonne 0 et ne passe pas à la ligne suivante. Cela permet de réimprimer la même ligne.

0

Faire un certain nombre d'hypothèses dont vous devriez faire l'intervieweur au courant ou demandez-leur sur:

Placez le texte dans un tampon circulaire, de l'indice en cours d'impression n caractères où n est la largeur de la console. Imprimez un '\ r' pour revenir au début de la même ligne. Après un intervalle de temps, incrémenter l'index du tampon et répéter.

Ainsi, la structure de données qu'ils ont été pêche à la ligne pour est un tampon circulaire ou anneau

Sans bibliothèque de console autre que stdio, vous obtiendrez au fond de l'écran vide simplement en imprimant h newlines, où h est> = la hauteur de la console

0

La première question est bonne ... mais elle ne fournit pas autant d'informations.

il y a d'autres peuvent im ways..but vous dire que u peut faire cela dans BGI graphiques utilisés dans Borland ... Compilateurs

vous pouvez faire ce qui suit:

simple il suffit de mettre une barre étroite (la longueur est inférieure à la hauteur de l'écran) sur le côté droit de l'écran ... et ensuite vous devez activer le pointeur de la souris en utilisant l'interruption ... encore une chose la couleur de la barre de défilement devrait être différente de l'arrière-plan ... et maintenant amenez le pointeur de la souris sur la barre et appliquez simplement getPixel(x,y) func. (ici x et y sont les coordonnées du pointeur de la souris)
il vous donnera la couleur de ce pixel perticular et le comparez avec votre couleur de la barre de défilement ... si elle correspond, alors vous avez la barre de défilement ..et vous pouvez vous déplacer vers le haut et vers le bas ...

et vous pouvez utiliser Linked List dans ce ...

si u besoin d'aide BGI..let me know..thanx ...

0

Quand je devais le faire dans mon projet C fin de l'année il y a environ 3-4 ans, je remmber que j'ai utilisé la Liste Liée Recto-verso pour supporter le défilement vers l'avant et vers l'arrière. Implémentations de Vert et Horz. Comment cela est-il implémenté: chaque "Page" est un nœud différent dans la liste liée qui sauvegarde le pointeur vers la page précédente et la page suivante. Le réglage de la position du courant est un calcul mathématique pur.

Je suis sûr que ce n'est pas la meilleure façon, mais c'est un moyen.

espoir qu'il a aidé,

Ran.

-4

Cela pourrait fonctionner.

#include <stdio.h> 
    #include <conio.h> 
    #include <string.h> 
    //library for sleep() function 
    #include <unistd.h> 

    void main() 
    { 
    int i,j,n,k; 

    //text to be srolled 
    char t[30]="akhil is a bad boy"; 
    n=strlen(t); 
    for(i=0;i<n;i++) 
    { 
     printf("\n"); 
//loop for printing spaces 
     for(j=20-i;j>0;j--) 
     { 
      printf(" "); 
     } 

/*printing text by adding a character every time*/ 
     for(k=0;k<=i;k++) 
     { 
      printf("%c",t[k]); 
     } 
// clearing screen after every iteration 
     sleep(1); 
     if(i!=n-1) 
     clrscr(); 

    } 


    }