Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
首字母C(geo2jason工具)_C - Fatal编程技术网

首字母C(geo2jason工具)

首字母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

下面是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 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:Your
float
点很重要,但是科学程序员知道浮点模式能够精确地保存整数。谢谢。请建议在while loopK&R的每次迭代后使用一个好的bookstarted打印换行符,这与原始代码一样混乱。不太晦涩的版本:
printf(“,\n”);int结果=0;而(result!=3){result=scanf(…);…}
。多花点时间也可以。@Lundin:也许我只是一条怪鱼,但我觉得我的建议非常清楚。你是一条怪鱼!:)如果您再次查看原始代码,甚至不需要
start
变量,它只是一堆乱七八糟的东西。感谢您用外行语言进行解释