编辑:对于我的班级,我必须使用scanf.所以推荐其他输入方式不是我正在寻找的解决方案(如果有一个涉及scanf).
如果我正在读取小项目的用户输入(例如,游戏).让我们说我会问would you like to play? 这会接受yes或no回答.所以我写了一些像这样的简单代码:
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
Run Code Online (Sandbox Code Playgroud)
所以这段代码应该简单地要求他们输入yes或no.我正在设定我char array的大小3.这样它足够大yes,也可以no.但是如果有人要输入无效的输入,比如yesss,我知道如何比较字符串以后处理这样的事件,但是这不会在技术上/可能覆盖我声明的其他局部变量,因为它会扩展到我的数组长度之外?如果是这样,有没有办法处理这个限制3个输入字符或什么?如果没有,为什么/如何知道只输入3的大小?
*注意:我是C的新手,我找不到这个,所以即使这很简单,我也很感激.因为我显然缺少一些东西.我来自java背景,这甚至都不是问题.
我有这个但是一旦它到达假定的EOF它再次重复循环和scanf.
int main(void)
{
char words[16];
while(scanf("%15s", words) == 1)
printf("%s\n", words);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在解析一个字符串(a char*),我正在使用sscanf它将字符串中的数字解析为双精度数,如下所示:
// char* expression;
double value = 0;
sscanf(expression, "%lf", &value);
Run Code Online (Sandbox Code Playgroud)
这很好用,但我想继续通过常规方法解析字符串.我需要知道已经解析了多少个字符,sscanf以便我可以从新的偏移量恢复手动解析.
显然,最简单的办法就是以某种方式计算出的字符数sscanf分析,但如果没有简单的方法来做到这一点,我很开放的替代双解析选项.但是,我目前正在使用sscanf它,因为它快速,简单,易读.无论哪种方式,我只需要一种方法来评估double并继续解析它.
什么是字符串格式intptr_t, uintptr_t 哪个对32位和64位架构都有效.
编辑
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type "AAA"
Run Code Online (Sandbox Code Playgroud)
这是我在64位但不是32位的警告.
intptr_t AAA
Run Code Online (Sandbox Code Playgroud) 所以我来自C背景(原来最初,虽然我已经有近5年没用过那种语言了)而且我正在尝试用Java中的字符串解析一些值.在CI中将使用sscanf.在Java中,人们告诉我"使用Scanner或StringTokenizer",但我看不出如何使用它们来实现我的目的.
我的输入字符串看起来像"17-MAR-11 15.52.25.000000000".CI会做类似的事情:
sscanf(thestring, "%d-%s-%d %d.%d.%d.%d", day, month, year, hour, min, sec, fracpart);
Run Code Online (Sandbox Code Playgroud)
但在Java中,我所能做的就是:
scanner.nextInt();
Run Code Online (Sandbox Code Playgroud)
这不允许我检查模式,对于"MAR"我最终不得不做以下事情:
str.substring(3,6);
Run Code Online (Sandbox Code Playgroud)
可怕!当然有更好的方法吗?
所以我偶然发现了这段代码,我无法弄清楚它的用途是什么,或者它是如何工作的:
int word_count;
scanf("%d%*c", &word_count);
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是%*d引用char指针或word_count不接受char变量.
有人可以对此有所了解吗?
我正在使用scanf()从用户那里获取一组int.但我希望用户一次提供所有4个整数而不是4个不同的提示.我知道我可以通过以下方式获得一个价值:
scanf( "%i", &minx);
Run Code Online (Sandbox Code Playgroud)
但我希望用户能够做到这样的事情:
Enter Four Ints: 123 234 345 456
Run Code Online (Sandbox Code Playgroud)
是否有可能做到这一点?
请考虑以下代码:
#include <stdio.h>
int main (void)
{
char str1[128], str2[128], str3[128];
printf ("\nEnter str1: ");
scanf ("%[^\n]", str1);
printf ("\nstr1 = %s", str1);
printf ("\nEnter str2: ");
scanf ("%[^\n]", str2);
printf ("\nstr2 = %s", str2);
printf ("\nEnter str3: ");
scanf ("%[^\n]", str3);
printf ("\nstr3 = %s", str3);
printf ("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当它仅执行scanf提示的第一站时.该计划不会停止下一个scanfs.但是如果格式字符串从更改"%[^\n]"为" %[^\n]"(注意之前的空格%),那么它可以正常工作.是否会自动接受先前输入缓冲区中的某些现有换行符?但冲洗stdin并不能解决这个问题.
造成这种情况的原因是什么.
我正在使用Eclipse来编写C/C++代码,而我正在努力解决可能非常简单的问题.在我下面的代码中,我使用printf()和之后scanf().Althougth printf是在scanf()输出不同之前编写的.我能在这里找到类似问题的东西.但我无法解决它.有任何想法吗?
码:
#include <stdio.h>
int main()
{
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期产量:
Enter a number:1
1
Run Code Online (Sandbox Code Playgroud)
相反,我得到:
1
Enter a number:1
Run Code Online (Sandbox Code Playgroud) 我想读取使用scanf()函数用空格分隔的数字(整数类型).
我已阅读以下内容
C,从单个输入行读取多个数字(scanf?)
如何用空格读取scanf
这对我没有多大帮助.如何读取带空格的数字作为分隔符.例如,我现在有以下数字作为输入,2 5 7 4 3 8 18我想将它们存储在不同的变量中.
请帮忙.