#include <stdio.h>
int main()
{
int r;
printf("radius is : cm");
scanf("%d",&r);
printf(" radius is %d cm",r);
}
這是我寫的代碼,它正在列印“半徑是:厘米(輸入)”,但我希望 PC 將其列印為“半徑是:(輸入)厘米”,我在掃描陳述句之后使用另一個列印陳述句進行了嘗試但是在用戶提供輸入后會列印 ' cm '。
Tl:dr 如何從列印陳述句的句子之間獲取輸入
uj5u.com熱心網友回復:
如果沒有終端庫,這真的無法完全完成,但是您可以通過在“:”和“cm”之間添加空格并在行尾列印退格符以將游標推回來接近:
#include <stdio.h>
int main()
{
int r;
printf("radius is : cm\b\b\b\b\b\b\b\b");
scanf("%d",&r);
printf(" radius is %d cm",r);
}
輸出:
radius is : cm
^
|--cursor is here
需要注意的是,如果您輸入的字符多于預期,它們將覆寫“cm”。
uj5u.com熱心網友回復:
沒有什么好方法可以以簡單的方式做到這一點。首選的方法是深入研究像 那樣的庫ncurses,但我認為對于這個問題來說,使用它有點太過分了。
一件事“有效”但會被認為是不好的做法,并且肯定有其缺點,那就是簡單地列印退格字符。
printf("radius is : cm\b\b\b\b\b\b\b");
scanf("%d",&r);
這將使“cm”保持在固定位置,但您可以用輸入覆寫它,然后它就不會回來了。如果您希望它在您輸入更多字符時移動,那么您有一些(很多)作業要做。
如果您的目標是明確單元,請考慮使用不同的措辭。像“以厘米為單位輸入半徑:”或“半徑(厘米):”或類似的東西。
這是一個示例,說明如果您希望“cm”在您鍵入時來回浮動需要什么。請注意,這不能保證作業。這取決于您要列印到的控制臺。
void clearline() {
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
printf(" ");
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
}
int main()
{
int ch;
char buf[200] = {0};
int index = 0;
printf("Enter radius: cm\b\b\b");
while((ch = getchar()) != EOF && ch != '\n') {
if(ch == '\b' && index != 0) buf[--index] = 0;
buf[index ] = ch;
clearline();
printf("Enter radius: %s cm", buf);
fflush(stdout);
}
int r = atoi(buf);
printf(" radius is %d cm", r);
}
編輯:當我在家嘗試時,上述方法不起作用。我記得我確實設法修復了一些有用的東西,但我不記得是如何修復的。但是,它提供了一個很好的想法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331930.html
