2013-02-08 2 views
-1

C'est donc mon code à ce jour:printf() sur la même ligne comme scanf()

printf("Input:\t Radius:\tSurface Area:\t Circumference:\t Volume:\n\n"); 
scanf("%lg", &diameter); 
printf("%lg%lg\t\t%-12lg\t\t%-12lg\t\t%-12lg\n\n", diameter, calcRadius(diameter), calcSurfaceArea(diameter), calcCircumference(diameter), calcVolume(diameter)); 

Ma sortie apparaît comme ceci:

Input:  Radius:  Surface Area: Circumference:  Volume: 

99 
9949.5   30775.1     310.86     507790 

Press any key to continue . . . 

Comment puis-je faire la sortie apparaît comme ceci:

Input:  Radius:  Surface Area: Circumference:  Volume: 

    99  9949.5   30775.1  310.86    507790 

Press any key to continue . . . 

En bref, je me rends compte que, après scanf() est utilisée et l'utilisateur presse entre, printf() imprime automatiquement à la nouvelle ligne. Comment puis-je l'obtenir afin qu'il imprime sur la même ligne sur laquelle l'utilisateur a tapé un numéro, même lorsque l'utilisateur appuie sur Entrée.

Dois-je utiliser une fonction différente pour obtenir des entrées, ou une méthode complètement différente?

Répondre

0

Vous pouvez utiliser la bibliothèque termios pour définir STDIN en mode non-canonique et non-écho, et commencer à répercuter les caractères vous-même afin qu'il n'y ait pas de nouvelle ligne imprimée. En outre, vous auriez à utiliser votre propre impmentation de scanf si vous voulez aller dans cette voie:

http://www.gnu.org/software/libc/manual/html_node/Noncanon-Example.html

0

Vous devez regarder dans la bibliothèque curses de faire ce genre de chose.

0

Vous savez ce que scanf ferait. Pour votre programme, vous pouvez simplement supprimer le diamètre d'impression dans votre printf()

printf("Input:\t Radius:\tSurface Area:\t Circumference:\t Volume:\n\n"); 
scanf("%lg", &diameter); 
printf("\t%lg\t\t%-12lg\t\t%-12lg\t\t%-12lg\n\n", calcRadius(diameter), 
calcSurfaceArea(diameter), calcCircumference(diameter), calcVolume(diameter));