2014-02-20 35 views
-3

任何人都可以解释这段代码的工作原理吗?这段代码中的`started`变量是做什么的?

#include <iostream> 
#include <stdio.h> 
using namespace std; 
int main(int argc, char const *argv[]) 
{ 
    float longitude; 
    float latitude; 
    char info[80]; 
    int started = 0; 

    cout << "Data = {"; 
    while (scanf("%f, %f, %79[^\n]", &latitude, &longitude, info) == 3) 
    { 
     if(started) 
      printf(",\n"); 
     else 
      started = 1; 

     printf("{latitude: %f, longitude: %f, info: '%s'}",latitude, longitude, info); 
    } 

    return 0; 
} 

我不明白为什么使用started变量。为什么在总是将其设置为0时检查此变量的值?任何人都可以为我解释这行代码吗?

+6

如果你无法通过“纸上谈兵”的执行代码,那么我建议你做一个调试器内。在调试器中逐行执行代码,应该很快就会清楚它的作用。 –

+0

第一次通过'while'循环看看 - 'started'的值和'if'的哪个分支需要做什么?什么打印出来?现在,通过while循环第二次回答相同的问题。 – kbshimmyo

+0

请注意,您正在''C'''printf'和'scanf'语句混合使用'C++'样式'cout'语句,这被很多人认为是糟糕的风格。 –

回答

0

scanf()返回value 3使得进入循环,

而(scanf函数( “%F,%F,%79 [^ \ n]的”,&纬度,经度&,信息)== 3 ){

作为started被声明为0if失败使得执行else部分,

if(started) 
     printf(",\n"); 

else,开始变得1

else 
    started = 1; 

打印三个值,

printf("{latitude: %f, longitude: %f, info: '%s'}",latitude, longitude, info); 

这里上started1印刷\n直到scanf()不等于3 while循环退出,

}

0

注意“开始= 1;”。

在循环的第一次运行中,不需要添加逗号分隔符。分配后,逗号将在每个参数后添加。

3

我不知道为什么在这段代码启动变量被使用?

started变量用于确定这是否是第一次通过循环。在第二次和以后的过程中,会打印一个换行符,因此您不总是在同一行上打印。

基本上,这段代码做了一个循环,它重复读入3个值(直到用户输入时没有输入3个值),并打印出来。第一次不打印换行符,但是每隔一段时间打印一个逗号+换行符。