[英]How to loop through integers from a given txt file and find 2nd largest number in c?
[英]How to find the largest integer among an infinite number of integers in C
#include <stdio.h>
int main()
{
int res;
int max;
int i;
int Maximum;
for (i = 0 ; i < res; i++)
{
res = scanf("%d",&max);
if( res != 1 ) return 0;
if(max > Maximum)
{
Maximum = max;
}
}
printf("%d",&Maximum );
return 0;
}
嗨,大家好,我不明白為什么Maximum會打印出一個討厭的高數字。 只想知道為什么一個原因,而不是握住我的手,因為我真的想學習這種語言,所以我主要了解Java,所以這里發生了什么?
1.無需傳遞整數變量的地址。否則,您現在將錯誤的參數傳遞給%d
會導致未定義的行為 。
printf("%d",&Maximum );
^ remove &
要打印Maximum
-
printf("%d", Maximum);
2. Maximum
在您的程序中是統一的 ,因此,不進行初始化而進行比較是不正確的。
int Maximum; // unintialized variable
在使用之前將其初始化-
int Maximum=INT_MIN; // header <limits.h>
3.您的這個循環不是無限的。 只會重復1
次-
for (i = 0 ; i < res; i++)
{
//your code
}
而是使用無限循環-
for(; ;){ // or while(1)
//your code
}
將Maximum
初始化為某個值,該值對於所有可能的輸入值都是最低的。
例如,如果保證輸入僅包含正整數,則
Maximum = -1;
或者最好使用Maximum = INT_MIN;
如評論中所指出。 為此,您需要在程序中包含<limits.h>
頭文件。
printf("%d",&Maximum );
錯了 這將打印Maximum
的地址。
使用printf("%d", Maximum);
for (i = 0 ; i < res; i++)
res
未初始化! 對於無限數,您需要將此循環設為while(1)
或for( ; ; )
為變量Maximum
初始化一些值。
Maximum=0; // you can assign any value.
然后,您必須更改此行,
printf("%d",&Maximum );
進入
printf("%d",Maximum );
&Maximum
將給出整數變量的地址。 當從scanf
獲取輸入時,我們只需要給出類似的信息。
因為該程序無法知道用戶是僅輸入負數還是僅輸入正數,還是同時輸入這兩者,所以將“ max”(或min)初始化為隨機數(例如零),希望“確定”為最大/最小在執行過程中,可能會在某些時候產生錯誤的結果。
以下是一種僅依靠用戶輸入的簡化方法,而沒有嘗試為絕對最小值/最大值包括任何其他頭文件。 它假定第一個提供的輸入為“ max”,並且如果任何后續輸入超過該值,則將重置max。
#include <stdio.h>
int main(void) {
int num, max;
int first_input = 1;
while(scanf("%d", &num) != EOF){
if(first_input){
max = num;
first_input = 0;
}
else{
if(max < num){
max = num;
}
}
}
printf("\n Maximum of the scanned numbers is: %d", max);
return 0;
}
該程序將繼續運行,直到用戶通過按Ctrl + D / Ctrl + Z終止輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.