![](/img/trans.png)
[英]printf statement is not executing before scanf statement in netbean
[英]how the scanf() is executing before printf()
我有以下代碼可以像math.h庫中那樣實現pow()
。 好吧,我有兩個問題:
"power:"
之前接受輸入? 我如何計算大整數的冪,例如假設所計算的冪為:22235645654789787978797797(例如)。 如何計算和打印它。
#include <stdio.h> unsigned long long int pow(unsigned long long int n,unsigned long long int d); int main(){ unsigned long long int a,x,n; printf("Number:"); scanf("%u\\n",&a); printf("power:"); scanf("%u\\n",&n); x = pow(n,a); printf("%u\\n",x); } unsigned long long int pow(unsigned long long int n,unsigned long long int d){ if(n+1==1) return 1; return d*pow(n-1,d); }
在圖像中,您可以看到變量n
的輸入在從printf()打印"power:"
之前正在接受輸入,因此無論您鍵入什么輸入。
請幫助我理解它。 打開以獲取任何建議和意見。
您的printf
和scanf
是按順序執行的。 由於緩沖,輸出看起來混亂了。
當打印"power:"
時,它結束於緩沖區中,直到輸入數字后才會刷新該緩沖區。 添加\\n
可解決控制台輸出問題。 您也可以顯式調用fflush(STDOUT)
以將緩沖的字符串打印到屏幕上。
注意:您沒有正確unsigned long long
讀取/打印unsigned long long
。 使用llu
,或參閱以下問答以獲取有關64位無符號整數的正確格式說明符:
unit64_t a, x;
...
scanf("%"SCNu64, &a);
printf("n: %"PRIu64"\n", x);
您不應使用scanf("%u\\n",&n)
,而應使用scanf("%u",&n);
沒有\\n
。 它將完美地工作。 對於第二個問題,通常在C編程語言中看不到這類計算。 這將導致隱藏的緩沖區溢出,也許其他人會比我更好。
問題出在調用scanf()
和printf()
函數的格式字符串中。
格式字符串不應包含“ \\ n”
所有scanf()
格式字符串和printf()
格式字符串都使用'%u',但它們應該使用'%llu',因此它們與變量類型匹配
注意:即使使用更正的代碼,如果結果數足夠大,也會溢出'unsigned long long int'變量,並且程序將失敗。
這是更正的代碼,請仔細檢查
#include <stdio.h>
#include <stdlib.h>
unsigned long long int myPow(unsigned long long int n, unsigned long long int d);
int main( void )
{
unsigned long long int a,x,n;
printf("Number:");
if( 1 != scanf("%llu",&a) )
{
perror( "scanf for first number failed");
exit( EXIT_FAILURE );
}
printf("power:");
if( 1 != scanf("%llu",&n) )
{
perror( "scanf for second number failed" );
exit( EXIT_FAILURE );
}
printf( "n=%llu, a=%llu\n", n, a);
x = myPow(n,a);
printf("%llu\n",x);
}
unsigned long long int myPow(unsigned long long int n,unsigned long long int d)
{
if(n+1==1)
return 1;
return d*myPow(n-1,d);
}
我對您的代碼進行了一些修改,以正確格式化數字,並且我認為該程序現在可以滿足您的要求。
#include <stdio.h>
unsigned long long int pow(unsigned long long int n,unsigned long long int d);
int main(){
unsigned long long int a,x,n;
printf("Number:");
scanf("%llu",&a);
printf("power:");
scanf("%llu",&n);
x = pow(n,a);
printf("%llu\n",x);
}
unsigned long long int pow(unsigned long long int n,unsigned long long int d){
if(n+1==1)
return 1;
return d*pow(n-1,d);
}
測試
Number:2
power:10
1024
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.