【问题标题】:Scanf() function with strings带有字符串的 Scanf() 函数
【发布时间】:2019-10-04 15:47:47
【问题描述】:

我有以下字符串要从 scanf 函数中读取

1041657W 324944N 河畔

如果我调用 scanf():

    uint32_t N = 0;
    char Ch = 'z';
    char Name[100];
    scanf("%d %c %s", &N, &Ch, Name);

变量的值如下

    N = 1041657
    Ch = 'W'
    Name = "324944N"

我不确定这些值是如何被扫描的。你能告诉我每个变量如何显示给定的值吗?

【问题讨论】:

  • %d 读取一个数字(停在W),%c 读取一个字符(W),%s 读取一个字符串(停在空白处)。
  • @hmm 是的,这是一个错字,谢谢。我的意思是从给定的字符串中扫描所有内容。
  • 该问题旨在使用 scanf();但是,它是完全有效的(使用 printf())。您需要进行两个关键观察:  printf() 无法更改存储在任何变量中的值  由于 Name[] 未初始化,因此无法保证其具体内容
  • @JDog1999 您需要开始阅读初学者的 C 教科书。 “我对 char Ch = 'z' 和 char Name[100] 的作用感到困惑”:这是最基本的 C 知识。char Ch = 'z'; 声明了一个 char 变量并使用 ASCII 值对其进行初始化字母 z。 char Name[100]; 声明了一个 100 个字符的数组。
  • @JDog1999,是的,当然字符串可以包含空格,但空格被视为带有%s 说明符的分隔符。阅读scanf 规范。

标签: c scanf


【解决方案1】:
[wally@localhost tmp]$ cat lat.c
#include <stdio.h>

int main (void)
{
    char    name [500], dir1, dir2;
    int lng, lat, sts;

    sts = sscanf ("1041657W 324944N Riverside", "%d%c %d%c %s",
                   &lng, &dir1, &lat, &dir2, name);
    printf ("status %d, %d%c %d%c %s\n", sts, lng, dir1, lat, dir2, name);
    return 0;
}

[wally@localhost tmp]$ gcc lat.c -o lat
[wally@localhost tmp]$ ./lat 
status 5, 1041657W 324944N Riverside

scanf() 返回已处理的格式化参数的数量,因此五个表示已处理所有参数。

请注意,对于大多数地理计算,DMS(度分秒)并不是特别方便。要转换为十进制度,分和秒从 1/100 和 1/10000 转换的十进制值转换为 1/60 和 1/3600。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多