标签: scanf

什么是scanf("%*s")和scanf("%*d")格式标识符?

"%*"scanf()中格式的实际用途是什么.如果存在这种格式,则必须有一些目的.以下程序给出了奇怪的输出.

#include<stdio.h>
int main()
{
        int i;
        char str[1024];

        printf("Enter text: ");
        scanf("%*s", &str);
        printf("%s\n", str);

        printf("Enter interger: ");
        scanf("%*d", &i);
        printf("%d\n", i);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

manav@workstation:~$ gcc -Wall -pedantic d.c
d.c: In function ‘main’:
d.c:8: warning: too many arguments for format
d.c:12: warning: too many arguments for format
manav@manav-workstation:~$ ./a.out
Enter text: manav
D
Enter interger: 12345
372
manav@workstation:~$
Run Code Online (Sandbox Code Playgroud)

c formatting scanf

44
推荐指数
4
解决办法
7万
查看次数

使用c中的scanf读取double值

我尝试使用C中的scanf()读入2个值,但系统写入内存的值不等于我输入的值.这是代码:

double a,b;
printf("--------\n"); //seperate lines
scanf("%ld",&a);
printf("--------\n"); 
scanf("%ld",&b);
printf("%d %d",a,b);
Run Code Online (Sandbox Code Playgroud)

如果我输入1和2,CMD返回正确的,但是b = -858993460这是我已经尝试的:使用float或int而不是double,使用scanf_s,使用scanf("%d或%f用于%i或%li或%lf或%e或%g),使用fflush(stdin)清除键盘缓冲区,首先读入b,尝试所有可能的组合.我发现32位操作系统上的双倍长度存在问题,这样你就不得不使用scanf("%lf",&f)读取一个double.无论我做什么,第二个值总是错误的.

我在Windows 7 32位操作系统上使用MS VS express 2012 for Desktop.

c scanf conversion-specifier

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

man sscanf:%d 在 C 或 glibc 中已弃用?

我刚刚阅读 glibcsscanf 手册页(来自 Linux 手册页包),发现了以下内容:

\n
\n

可以使用以下转换说明符:
\n(...)

\n

d \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号十进制整数;\nnext 指针必须是指向 的指针int

\n

i \xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号整数;next\n指针必须是指向 的指针int。如果整数以 或 开头,则以 16 为基数读取0x0X如果以 开头,则以 8 为基数读取 0;否则以 10 为基数读取。仅使用与\n基数相对应的字符。

\n

o \xc2\xa0\xc2\xa0 已弃用。匹配无符号八进制整数;下一个指针\n必须是指向 的指针unsigned int

\n

(...)

\n
\n
    \n
  • 怎么就%d被废弃了呢?似乎所有int说明符都已弃用。
  • \n
  • 它是什么意思以及有什么可以替代它们?
  • \n
\n

c gnu glibc scanf

39
推荐指数
6
解决办法
4209
查看次数

用sscanf读取带空格的字符串

对于一个项目,我正在尝试从字符串中读取int和字符串.唯一的问题是sscanf在看到空格时似乎打破了读取%s.反正有没有解决这个限制?这是我正在尝试做的一个例子:

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

int main(int argc, char** argv) {
    int age;
    char* buffer;
    buffer = malloc(200 * sizeof(char));
    sscanf("19 cool kid", "%d %s", &age, buffer);

    printf("%s is %d years old\n", buffer, age);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的印刷品是:"酷是19岁",我需要"酷孩子19岁".有谁知道如何解决这一问题?

c string scanf

37
推荐指数
3
解决办法
11万
查看次数

printf无法在控制台上打印

我开始用C语言了.我使用eclipse(juno)作为我的IDE并安装了CDT插件.我还解压缩了mingw64(GCC编译器).我写了一个非常简单的程序,看它是否有效.这是我的代码:

#include <stdio.h>

int main()
{
    int age;
    printf("Hello, please enter your age:\n");
    scanf("%d", &age);
    printf("Your age is %d", age);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是输出缓冲区填充了第一个字符串的值,printf但不会将其输出到控制台.我必须输入一个数字,然后只有缓冲区将所有数据倒入控制台,所以我看到控制台是这样的:

1
Hello, please enter your age:
Your age is 1
Run Code Online (Sandbox Code Playgroud)

而不是预期的:

Hello, please enter your age:
1
Your age is 1
Run Code Online (Sandbox Code Playgroud)

现在,我发现我可以fflush(stdout)在第一个之后使用,printf但我不认为这个解决方案是优雅的,甚至是必要的.关于如何克服这个问题的任何想法?

编辑 - 因为我在大学里学习这个,我不能使用课程中没有学到的东西,所以我只能使用printfscanf

新编辑 - 我想我已经找到了解释.正如我所说,我正在输出到Eclipse内的控制台视图.奇怪的是,如果我从Windows的命令行编译并运行程序,我得到想要的结果.因此,我认为eclipse实际上是将输出写入文件并在控制台窗口中显示.如何强制eclipse在我的运行配置中打开一个真正的命令行窗口?

c eclipse printf gcc scanf

37
推荐指数
5
解决办法
16万
查看次数

尽管使用相同的固定长度数据类型,C 程序在不同的机器上产生不同的结果

我在尝试 inttypes.h 时编写的简单程序:

#include <stdio.h>
#include <stdbool.h>
#include <inttypes.h>

bool get_bit(uint32_t x, uint8_t n) {
    x >>= n;
    return x & 1;
}

int main() {
    uint32_t x;
    uint8_t n;

    printf ("Enter x: ");
    scanf("%"SCNu32, &x);

    printf ("Enter n: ");
    scanf("%"SCNu8, &n);

    printf("The %"PRIu8"th bit of %"PRIu32" is: %d", n, x, get_bit(x, n));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的手机(64 位八核 ARN LTE Soc Android 10)上,它工作正常:

Enter x: 1
Enter n: 0
The 0th bit of 1 is: 1
Run Code Online (Sandbox Code Playgroud)

但在我的计算机(64 位 x86 Windows …

c windows mingw scanf c99

37
推荐指数
1
解决办法
2412
查看次数

C - scanf()vs gets()vs fgets()

我一直在做一个相当简单的程序,将一串字符(假设输入数字)转换为整数.

我改完之后,我注意到一些非常奇特的"错误",我不能回答大多是因我有限的知识如何,scanf(),gets()fgets()职能的工作.(尽管我读过很多文学作品.)

所以没有写太多文本,这里是程序的代码:

#include <stdio.h>

#define MAX 100

int CharToInt(const char *);

int main()
{
    char str[MAX];

    printf(" Enter some numbers (no spaces): ");
    gets(str);
//  fgets(str, sizeof(str), stdin);
//  scanf("%s", str);

    printf(" Entered number is: %d\n", CharToInt(str));

    return 0;
}

int CharToInt(const char *s)
{
    int i, result, temp;

    result = 0;
    i = 0;

    while(*(s+i) != '\0')
    {
        temp = *(s+i) & 15;
        result = (temp + result) * 10;
        i++;
    } …
Run Code Online (Sandbox Code Playgroud)

c gets scanf fgets

36
推荐指数
4
解决办法
9万
查看次数

scanf()和fgets()之间的区别

我想知道fgets()和之间有什么区别scanf().我使用C作为我的平台.

c scanf fgets

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

寻找C#相当于scanf

我以前习惯用C语言编写代码,发现这个scanf函数非常有用.不幸的是,C#中没有相应的东西.

我正在使用它来解析半结构化文本文件.

我在这里找到了一个有趣的scanf实施例子.不幸的是,它看起来陈旧且不完整.

有谁知道scanfC#实现?或者至少可以作为逆转的东西string.Format

c# scanf

31
推荐指数
4
解决办法
5万
查看次数

如果'&'没有放入'scanf'语句会怎么样?

我去了一个采访中,我被问到这个问题:

您对以下内容有何看法?

int i;
scanf ("%d", i);
printf ("i: %d\n", i);
Run Code Online (Sandbox Code Playgroud)

我回答了:

  • 该程序将成功编译.
  • 它将错误地打印数字,但它将一直运行直到结束而不会崩溃

我做出的回应是错误的.我不堪重负.

在那之后他们解雇了我:

在某些情况下,程序会崩溃并导致核心转储.

我不明白为什么程序会崩溃?谁有人解释我的原因?任何帮助赞赏.

c scanf stdio

31
推荐指数
5
解决办法
4243
查看次数

标签 统计

scanf ×10

c ×9

fgets ×2

c# ×1

c99 ×1

conversion-specifier ×1

eclipse ×1

formatting ×1

gcc ×1

gets ×1

glibc ×1

gnu ×1

mingw ×1

printf ×1

stdio ×1

string ×1

windows ×1