我正在尝试创建一个函数,询问用户一个值,然后将其存储为输入的最大值或最小值,或者如果用户输入一个数字< 0,它将退出dataentry()函数,否则它将继续询问用户输入。
#include <stdio.h>
#include <string.h>
void dataentry();
int count = 0;
float max, min, mean, old, new;
float data;
char Old[10],Data[10],choice[25];
int main(void)
{
dataentry();
}
void dataentry()
{
printf(" |Enter Wind Speed Value:\n");
printf("**|Enter -1 to exit data entry mode|**\n");
fgets(Old, sizeof(Old), stdin);
sscanf(Old, "%f",&old);
max = old;
min = old;
data = 1;
count = 1;
printf("max=%f, min=%f, data=%f, count=%d.", max, min, data, count);
for (count == 1;data >= 0; count++)
{
printf("\nEnter data value: ");
//fgets(Data, sizeof(Data), stdin); // I commented this out because I got a coredump error with it in
sscanf(Data,"%f", &data);
if (data >= max)
{
max = data;
}
else if (data <= min && data > 0)
{
min = data;
}
}
}
程序提示您第一次输入数据后,在它到达for循环之前,它会起作用并输入您的值。然而,它进入无限循环打印“输入数据值:”一遍又一遍。我使用printf语句打印出max,min,data和count值,这样我就可以检查它们是否存储了它们,但是当函数进入for循环时它不再是我正在尝试的做。提前谢谢,这个函数是我写的一个更大的程序的一部分,但是我把所有不相关的东西都删掉了。
答案 0 :(得分:0)
如果您取消注释fgets()
行,它应该可以正常工作。这是一个工作版本,整理一下来检查你没有监控的函数的返回,并改进你的循环逻辑:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dataentry(void);
int count = 0;
float max, min, mean, old, new;
float data;
char Old[10], Data[10], choice[25];
int main(void)
{
dataentry();
}
void dataentry(void)
{
printf(" |Enter Wind Speed Value:\n");
printf("**|Enter -1 to exit data entry mode|**\n");
if ( !fgets(Old, sizeof(Old), stdin) ) {
fprintf(stderr, "No input.\n");
exit(EXIT_FAILURE);
}
if ( sscanf(Old, "%f", &old) != 1 ) {
fprintf(stderr, "Badly formed input, enter a float next time.\n");
exit(EXIT_FAILURE);
}
max = old;
min = old;
data = 1;
count = 1;
printf("max=%f, min=%f, data=%f, count=%d.\n", max, min, data, count);
while (1) {
printf("Enter data value: ");
fflush(stdout);
if ( !fgets(Data, sizeof(Data), stdin) ) {
break;
}
if ( sscanf(Data, "%f", &data) != 1 ) {
fprintf(stderr, "Badly formed input, enter a float next time.\n");
exit(EXIT_FAILURE);
}
if ( data < 0 ) {
break;
}
else {
++count;
}
if ( data >= max ) {
max = data;
} else if ( data <= min ) {
min = data;
}
}
printf("max=%f, min=%f, data=%f, count=%d.\n", max, min, data, count);
}
带样本输出:
paul@thoth:~/src/sandbox$ ./ssf
|Enter Wind Speed Value:
**|Enter -1 to exit data entry mode|**
10
max=10.000000, min=10.000000, data=1.000000, count=1.
Enter data value: 11
Enter data value: 12
Enter data value: 9
Enter data value: 8
Enter data value: -1
max=12.000000, min=8.000000, data=-1.000000, count=5.
paul@thoth:~/src/sandbox$
使用所有这些全局变量也是非常糟糕的形式。至少在目前的程序中,您可以在dataentry()
中定义每一个程序。