我是c编程的新手,我有一个我无法解决的问题,是否有人可以帮助我? 这是条件, 我在“C语言文件处理”中练习自我, 我想要做的是计算文件中浮点数的数量,例如, 输入文件包含:
1.0 0.0 4.5 74.0 1.33 0.0 -1.0 1.0
输出将是: 6
所以,我想要的是计算包含输入文件的数量和数量 到达-1.0后,计数结束,-1.0将不包括在计数中。或-1.0将是文件的结尾。我怎样才能做到这一点?我正在使用C编程语言。
我有一些代码,但它只计算数字,直到达到EOF。
#include <stdio.h>
int main() {
FILE *f=fopen("input.in","r");
int c,count;
if(f==NULL){ return 1; }
c = getc(f);
while(c != EOF){
if (c == ' ')
count++;
c = getc(f);
}fclose(f);
printf ("Number of Cases: %d\n", count);
return 0;
}
它只计算按空格分隔的输入数,但如果达到-1.0则不会停止。
谢谢!
答案 0 :(得分:1)
让我们看看你的程序的主循环:
c = getc(f);
while (c != EOF) {
if (c == ' ') count++;
c = getc(f);
}
显然你正在测试,因此找到了EOF案例,但在这个循环中你测试负输入?答:你不清楚你是不是会找到它。其他人建议使用getc()
以外的函数,它一次读取1个字符(比如scanf)。但是,为了说明的目的,让我们继续你的基本大纲:
c = getc(f);
while (c != EOF) {
if (c == '-') break; /* saw a minus, must be the end */
if (c == ' ') count++; /* saw a space, must be a gap between numbers, count that */
c = getc(f);
}
请注意,虽然更好,但这仍然不太正确 - 想象一下这个输入1.0 2.0 3.0
你将计算两个数字间距,但你不计算最后一个数字。此外,您无法处理数字之间多个空格的情况(1.0 2.0 3.0 -5)
。
int ws = 1; /* white space mode is on */
while ((c = getc(f)) != EOF) {
if (ws && (c == ' ')) continue; /* more white space, just skip */
if (ws && (c == '-')) break; /* white space ended with a minus, done */
if (ws) ++count; /* white space ended, start of new positive number */
ws = (c == ' '); /* are we starting whitespace mode again? */
}
想象一下各种输入字符串,并在脑海中一次一行地浏览这段代码。如果您发现问题,请考虑如何解决问题。重复。 提示:-1 vs -2
答案 1 :(得分:0)
#include <stdio.h>
int main() {
FILE *f=fopen("input.in","r");
int count=0;
double x;
if(f==NULL){ return 1; }
while(fscanf(f, "%lf", &x)==1 && !(x < 0)){
count++;
}
fclose(f);
printf ("Number of Cases: %d\n", count);
return 0;
}
答案 2 :(得分:0)
#include<stdio.h>
int main(){
FILE* f = fopen("a.in","r");
float ld;
int c=0,i;
double values[100];
if(f == NULL){
printf("File not found!");
return;
}
while(fscanf(f,"%f\n",&ld) == 1){
if(ld == -1.0){
printf("Number of Cases: %d\n",c);
}
c++;
}fclose(f);
return 0;