首字母C(geo2jason工具)
下面是Head First C中的程序。我无法理解变量首字母C(geo2jason工具),c,C,下面是Head First C中的程序。我无法理解变量started的用途,以及为什么它与if语句一起使用: if (started) printf(",\n"); else started = 1 提前谢谢 #include <stdio.h> #include <stdlib.h> int main() { float latitude; float longitude; char info[80]; int st
started
的用途,以及为什么它与if语句一起使用:
if (started)
printf(",\n");
else
started = 1
提前谢谢
#include <stdio.h>
#include <stdlib.h>
int main()
{
float latitude;
float longitude;
char info[80];
int started = 0;
puts("data=[");
while (scanf("%f,%f,%79[^\n]", &latitude , &longitude , info ) == 3) {
if (started)
printf(",\n");
else
started = 1 ;
if ((latitude < -90.0) || (latitude >90.0)) {
fprintf(stderr, "Invalid latitude: %f\n", latitude);
return 2;
}
if ((longitude < -180.0) || (longitude > 180.0)) {
fprintf(stderr, "Invalid longitude: %f\n", longitude);
return 2;
}
printf("{latitude: %f, longitude: %f , info: '%s'}", latitude , longitude , info );
}
puts("\n]");
return 0;
}
#包括
#包括
int main()
{
浮动纬度;
浮动经度;
字符信息[80];
int=0;
卖出(“数据=[”);
而(扫描频率(“%f,%f,%79[^\n]”,&纬度和经度,信息)==3){
如果(启动)
printf(“,\n”);
其他的
开始=1;
如果((纬度<-90.0)| |(纬度>90.0)){
fprintf(标准,“无效纬度:%f\n”,纬度);
返回2;
}
如果((经度<-180.0)| |(经度>180.0)){
fprintf(标准,“无效经度:%f\n”,经度);
返回2;
}
printf(“{纬度:%f,经度:%f,信息:'%s'}”,纬度,经度,信息);
}
放置(“\n]”);
返回0;
}
这是因为C语言中没有这样的布尔类型
因此,您可以模拟任何“布尔”变量,其中0表示false,而任何其他值都被视为true
那么街区呢
if (started) { .... }
只有在开始时才会执行与0不同这是一种相当冗长的方法,可以避免最初打印逗号后加换行符,仅此而已
我更喜欢使用for
循环来处理这类事情,以便将变量保持在更窄的范围内:
for (
int started = 0;
scanf("%f,%f,%79[^\n]", &latitude , &longitude , info ) == 3;
started = 1
){
如果这是一本书,你需要一本新书。将float
变量与双常量(如90.0
)进行比较在概念上是错误的。另外,使用if-else而不使用大括号{}(“复合语句”)是一种危险的风格,不应该被教授。还有一点小毛病:int main()
是过时的函数声明样式-书籍不应该教过时的样式。@Lundin:Yourfloat
点很重要,但是科学程序员知道浮点模式能够精确地保存整数。谢谢。请建议在while loopK&R的每次迭代后使用一个好的bookstarted打印换行符,这与原始代码一样混乱。不太晦涩的版本:printf(“,\n”);int结果=0;而(result!=3){result=scanf(…);…}
。多花点时间也可以。@Lundin:也许我只是一条怪鱼,但我觉得我的建议非常清楚。你是一条怪鱼!:)如果您再次查看原始代码,甚至不需要start
变量,它只是一堆乱七八糟的东西。感谢您用外行语言进行解释