【问题标题】:How to take one character at a time as input from a string of characters without space in c?如何一次将一个字符作为c中没有空格的字符串的输入?
【发布时间】:2017-03-24 05:31:07
【问题描述】:

假设,“5181 2710 9900 0012”- 是一串数字。我需要一次取一个数字作为输入,从没有空格的数字串中进行算术运算。所以,我写那个,

int a[20];
for(int i=0;i<16;i++)
{
scanf("%d",&a[i]);
  }

但它没有给我预期的结果。但是当我使用“%1d”而不是“%d”时,它给了我预期的结果。那么,它是如何工作的?

【问题讨论】:

  • scanf 中的 s 不应该是小写吗?
  • 是的,除此之外,就像@Gerard van Helden 所说,使用 %1d 来确定。另外,如果您使用 gcc,请确保使用 gcc -Wall -o yourprogram yourprogram.c 来检查您的程序是否正确编译。我编译了你的代码,它给了我一个错误,因为 scanf 不是小写的,只是这样的小写。
  • 在您的代码中?没有,它不会编译,正如@RoadRunner 所评论的那样。
  • 对不起,我把scanf函数的s用大写字母写错了。但这根本不是问题。问题是我的代码中“%d”和“%1d”的使用根据我的问题陈述给了我不同的输出。

标签: c string


【解决方案1】:

由于 scanf 是 printf 的倒数,您可以通过使用修饰符打印任何数字来验证这一点(只是一点提示)。*

一般来说,格式前的数字是“宽度”修饰符。在这种情况下,这意味着您只将一个字节读入一个数字。如果指定 %d,则可以是任意长度的数字。

例子:

#include <stdio.h>

int main() {
    int a;
    sscanf("1234", "%d", &a);
    printf("%d\n", a); // prints 1234
    sscanf("1234", "%1d", &a); 
    printf("%d\n"m a); // prints 1
}


*) 对于这种特殊情况,这似乎是错误的。但是,在指定 %d 格式时数字不会被截断是有道理的,因为这会改变数字的含义。但是,在许多情况下,您可以尝试 printf 会做什么来预测 scanf 的行为。但是,当然,阅读手册或文档总是更有帮助的方法:)

【讨论】:

  • 抱歉,我无法完全理解您的评论。请您详细解释一下好吗?
  • scanf 并不是真的 printf 的逆,有很多不同
猜你喜欢
  • 2015-05-14
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多