标签: scanf

scanf()可变长度说明符

如何使用变量指定scanf()应读入的最大字符数?

例如使用printf()你可以像这样使用*

#define MAXVAL 5
printf("Print at maximum MAXVAL chars: %.*s\n", MAXVAL, "myStringHere");
Run Code Online (Sandbox Code Playgroud)

这只会打印5个字符,如何才能scanf在MAXVAL中读取?MAXVAL必须用作长度说明符.我不能简单地做

scanf("%5s", string);
Run Code Online (Sandbox Code Playgroud)

现在我只能想到读入一个大数组scanf然后ssprintf用来将字符串存储到我的长度有限的字符串中.然而,使用长度说明符会更容易.

c scanf

11
推荐指数
2
解决办法
8381
查看次数

在Delphi中是否存在*SysUtils.Format*的反函数

有没有人为Delphi写过'UnFormat'例程?

我想象的是SysUtils.Format反转,看起来像这样

UnFormat('数字%n和另一个%n',[float1,float2]);

因此,您可以使用格式字符串将字符串解压缩为一系列变量.

我看过SysUtils中的'Format'例程,但我从未使用过汇编,所以对我来说没有意义.

delphi function scanf

10
推荐指数
1
解决办法
2638
查看次数

在获取之前输入C. Scanf.问题

我是C的新手,我在向程序输入数据时遇到了问题.

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
   int a;
   char b[20];

   printf("Input your ID: ");
   scanf("%d", &a);

   printf("Input your name: ");
   gets(b);   

   printf("---------");

   printf("Name: %s", b);   

   system("pause");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它允许输入ID,但它只是跳过其余的输入.如果我改变这样的顺序:

printf("Input your name: ");
   gets(b);   

   printf("Input your ID: ");
   scanf("%d", &a);
Run Code Online (Sandbox Code Playgroud)

它会工作.虽然,我不能改变秩序,我需要它原样.有人能帮我吗 ?也许我需要使用其他一些功能.谢谢!

c gets input scanf

10
推荐指数
2
解决办法
2万
查看次数

虽然scanf!= EOF或scanf == 1?

Ceteris paribus(格式良好的数据,良好的缓冲实践以及什么不是),是否有理由为什么我更喜欢循环而返回scanf为1,而不是!EOF?我可能已经在某个地方读过这个,或者其他什么,但我也可能错了.其他人怎么想?

c scanf

10
推荐指数
1
解决办法
3万
查看次数

可以`std :: istream :: operator >>()`接受整数基数前缀,比如stdio的%i格式说明符吗?

当使用的scanf()和它的变体,该格式说明%i将接受作为十六进制数据(加前缀"0x"为),八进制(前缀"0"),或十进制(无前缀),因此,例如字符串"0x10的","020 "和"16"都转换为十进制值为16的整数.

这可以通过std::istream::operator>>格式化输入完成吗?

使用普通的>> i无I/O操纵器"为0x10"被转换成零(或者更确切地说,前导0,则"×10"的部分不被处理),以及"020",以20 hex,octdec操纵行为像%x,%o%d分别.我正在寻找一个像%i.一样的通用整数输入操纵器.

有趣的是,hex操纵器可能同时接受"0x10"和"10"转换为16位小数.

如果您可能想知道,我正在实现一个表达式求值程序,并且我希望使用C/C++前缀约定允许整数操作数为十六进制,八进制或十进制.当前使用的实现sscanf()会自动使用%i,我很好奇是否可以修改它以使用iostream而无需显式解析数字格式.

c++ scanf istream iomanip

10
推荐指数
1
解决办法
1120
查看次数

为什么scanf需要&?

我想从stdin读取一个数字.我不明白为什么scanf要求在&我的变量名称之前使用:

int i;
scanf("%d", &i);
Run Code Online (Sandbox Code Playgroud)

为什么scanf需要变量的地址?

c scanf

10
推荐指数
4
解决办法
7633
查看次数

为什么scanf("%d",[...])不消耗'\n'?而scanf("%c")呢?

在这里,我在接受的答案中看到了这个陈述:

大多数转换说明符都跳过前导空格,包括换行符但%c不跳过.

对我来说,不清楚这种不同行为的基本原理,我会期待一个统一的(例如总是跳过或从不).

我用这样的一段C代码遇到了这种问题:

#include "stdio.h"

int main(void){

    char ch;
    int actualNum;

    printf("Insert a number: ");
    scanf("%d", &actualNum);
    // getchar();

    printf("Insert a character: ");
    scanf("%c", &ch);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

交换两个scanf小号解决了问题,以及在(注释)getchar,否则'\n'该第一插入将由所述第二消耗scanf%c.我在linux和windows上测试了gcc,行为是一样的:

gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2)
版权所有(C)2012 Free Software Foundation,Inc.
这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.

所以我的问题是:为什么%d%c行为不同WRT '\n'scanf

c scanf format-specifiers

10
推荐指数
2
解决办法
4172
查看次数

使用带有指向字符的指针的scanf函数

可能重复:
使用scanf进行分段错误

我写了以下代码.

int main(){
   char arrays[12];
   char *pointers;
   scanf("%s",arrays);
   scanf("%s",pointers);
   printf("%s",arrays);
   printf("%s",pointers);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么写作时会出错 scanf("%s",pointers);

c scanf

10
推荐指数
3
解决办法
5万
查看次数

如何忽略scanf中的浮点数("%d")?

如果用户输入整数变量的浮点数,我想打印无效输入.那可能吗?

 int a;
 scanf("%d",&a); // if user enters 4.35 print invalid input 
Run Code Online (Sandbox Code Playgroud)

我试过像这样的人物

  if(scanf("%d",&a)==1);
  else printf("invalid input");
Run Code Online (Sandbox Code Playgroud)

但如何处理浮动数字.如果用户输入4.35它截断到4但我想要无效输入.

c scanf

10
推荐指数
1
解决办法
3050
查看次数

gets和scanf有什么区别?

如果代码是

scanf("%s\n",message)  
Run Code Online (Sandbox Code Playgroud)

VS

gets(message)
Run Code Online (Sandbox Code Playgroud)

有什么区别?似乎他们都得到了消息的输入.

c gets scanf

10
推荐指数
3
解决办法
6万
查看次数

标签 统计

scanf ×10

c ×8

gets ×2

c++ ×1

delphi ×1

format-specifiers ×1

function ×1

input ×1

iomanip ×1

istream ×1