问题:用户以24小时格式输入时间。 Array也以24小时格式列出了不同的时间。我想将用户输入的数字与最接近用户输入时间的时间进行比较。无论哪个数字最接近用户输入的时间都将显示在屏幕上。我一直在公司工作一夜之间工作,并试图理解这背后的编程。谁能帮我?顺便说一句,我刚刚开始这个C编程课程。如果你看到任何看起来像C#代码的东西,那是因为我还没有学到足够的东西。这是我到目前为止所做的:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int hours, mins; //24 hour time to be entered by user
int bestTime = scanf("%d:,%d", &hours, &mins); //best time for user departure
char* depart [8] = {"8:00", "9:43", "11:19", "12:47", "14:00", "15:45", "19:00", "\0"}; //times available for departure
int counter; //count number of times to loop
printf("Please Enter The Best Time For Your Flight In 24 Hour Format.\n");
scanf("%d:,%d", &hours, &mins);
for(counter = 0; counter < ; counter++){
if(bestTime < depart[counter]){
bestTime = depart[counter];
}
}
return bestTime;
}
答案 0 :(得分:0)
你可以创建一个转换格式字符串的函数&#34; hh:mm&#34;分钟来自&#34; 00:00&#34;。然后用它来做所有的比较。
该功能的一个实现可以是
<uses-permission android:name="android.permission.INTERNET"></uses-
permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true"></supports-screens>
<application
android:allowBackup="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:largeHeap="true"
android:gravity="center"
android:label="See ME First"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Webview"
android:configChanges="keyboardHidden|screenSize|orientation">
</activity>
</application>
</manifest>
在所有字符串上调用此函数。它们会给你无符号整数。用它来查找最接近输入的数字。 (以类似的方式将输入转换为此格式)。
要清楚地将输入扫描为
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:gravity">center</item>
</style>
答案 1 :(得分:0)
这个想法:
- 从用户那里抽出时间后,将所有内容转换为分钟。
- 获取出发阵列的每个元素,使用atoi()将其转换为整数。
- 将出发时间转换为分钟,并将它们放入一个整数数组中。
- 现在将用户输入的总分钟数与数组中的总分数进行比较。这很简单;你比较一下 减去离境总数的绝对值 输入总数。最低的绝对值是您最接近的。为此,我 写了一个函数,返回里面最近元素的索引 阵列。
- 我显示与您的初始离开字符串数组相等的最接近的值。
- 注意:我假设您有7次出发时间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int findClosest(int * , int);
int main(void) {
int hours,mins,total; //24 hour time to be entered by user
char computationHours[3],computationMins[3];
int computationHoursInt,computationMinsInt,computationTotal;
int bestTime; //best time for user departure
int index;
char * depart[8] = {
"8:00",
"9:43",
"11:19",
"12:47",
"14:00",
"15:45",
"19:00",
"\0"
}; //times available for departure
int departures[7];
int counter; //count number of times to loop
printf("Please Enter The Best Time For Your Flight In 24 Hour Format.\n");
scanf("%d:%d", & hours, & mins);
total = (hours * 60) + mins;
for (counter = 0; counter < 7; counter++) {
if (strlen(depart[counter]) == 4) {
//Like 8:00
strncpy(computationHours, depart[counter], 2);
strncpy(computationMins, depart[counter] + 2, 2);
computationHoursInt = atoi(computationHours);
computationMinsInt = atoi(computationMins);
computationTotal = (computationHoursInt * 60) + computationMinsInt;
} else {
//Like 19:00
strncpy(computationHours, depart[counter], 2);
strncpy(computationMins, depart[counter] + 3, 2);
computationHoursInt = atoi(computationHours);
computationMinsInt = atoi(computationMins);
}
computationTotal = (computationHoursInt * 60) + computationMinsInt;
departures[counter] = computationTotal;
}
index = findClosest(departures, total);
printf("Closest timing is: %s", depart[index]);
return 0;
}
int findClosest(int values[], int n) {
int dist = abs(values[0] - n),closest;
int size = 7;
for (int i = 1; i < size; ++i) {
if (abs(values[i] - n) < dist) {
dist = abs(values[i] - n);
closest = i;
}
}
return closest;
}