"%*"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中的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.
我刚刚阅读 glibcsscanf 手册页(来自 Linux 手册页包),发现了以下内容:
\n\n可以使用以下转换说明符:
\n
\n(...)\n
d\xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号十进制整数;\nnext 指针必须是指向 的指针int。\n
i\xc2\xa0\xc2\xa0 已弃用。匹配一个可选的有符号整数;next\n指针必须是指向 的指针int。如果整数以 或 开头,则以 16 为基数读取0x;0X如果以 开头,则以 8 为基数读取0;否则以 10 为基数读取。仅使用与\n基数相对应的字符。\n
o\xc2\xa0\xc2\xa0 已弃用。匹配无符号八进制整数;下一个指针\n必须是指向 的指针unsigned int。(...)
\n
%d被废弃了呢?似乎所有int说明符都已弃用。对于一个项目,我正在尝试从字符串中读取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语言了.我使用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但我不认为这个解决方案是优雅的,甚至是必要的.关于如何克服这个问题的任何想法?
编辑 - 因为我在大学里学习这个,我不能使用课程中没有学到的东西,所以我只能使用printf和scanf
新编辑 - 我想我已经找到了解释.正如我所说,我正在输出到Eclipse内的控制台视图.奇怪的是,如果我从Windows的命令行编译并运行程序,我得到想要的结果.因此,我认为eclipse实际上是将输出写入文件并在控制台窗口中显示.如何强制eclipse在我的运行配置中打开一个真正的命令行窗口?
我在尝试 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 …
我一直在做一个相当简单的程序,将一串字符(假设输入数字)转换为整数.
我改完之后,我注意到一些非常奇特的"错误",我不能回答大多是因我有限的知识如何,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语言编写代码,发现这个scanf函数非常有用.不幸的是,C#中没有相应的东西.
我正在使用它来解析半结构化文本文件.
我在这里找到了一个有趣的scanf实施例子.不幸的是,它看起来陈旧且不完整.
有谁知道scanfC#实现?或者至少可以作为逆转的东西string.Format?
我去了一个采访中,我被问到这个问题:
您对以下内容有何看法?
Run Code Online (Sandbox Code Playgroud)int i; scanf ("%d", i); printf ("i: %d\n", i);
我回答了:
我做出的回应是错误的.我不堪重负.
在那之后他们解雇了我:
在某些情况下,程序会崩溃并导致核心转储.
我不明白为什么程序会崩溃?谁有人解释我的原因?任何帮助赞赏.