Tag: scanf

正确使用具有固定大小类型的scanf / printf(和系列)的方法?

阅读这个SO问题 ,我开始想知道 – 使用具有固定大小类型的scanf / printf (和系列)的正确方法是什么? 例如,如果我有short int或int ,我分别使用%hd和%d – 很好。 但是如果我有int16_t怎么int16_t ? short int可能与int16_t不同,它取决于平台。 任何其他固定尺寸(整体)类型都一样吗? 注意:因为看起来我收到了一些向下投票,因为我“ 没有尝试谷歌这个 ”,看起来我需要解释:我没有在这里看到类似的问题,这就是我发布它的原因。 SO中的大部分问题都可以通过谷歌回答,而不是在这里询问。 那将使StackOverflow成为现实,它实际上就是现在。 不,我没有这样做是为了声誉 – 我已经达到了今天的每日声望上限(在发布此问题之前有24票)。 我的观点是 – 我认为这不值得投票。

scanf()的行为

可能重复: scanf()与&运算符混淆 为什么我们需要一个&in scanf来输入整数,为什么不输入字符。 在输入时,&scanf指的是merory位置。 例如:- main() { int a; char c; scanf(“%d”,&a); scanf(“%c”c); }

在while循环中使用scanf

这个非常简单的问题可能是一个非常简单的答案: 我正在阅读Pratta的“C Primer Plus”,他一直在使用这个例子 while (scanf(“%d”, &num) == 1)… == 1真的有必要吗? 似乎有人可以写: while (scanf(“%d”, &num)) 似乎相等测试是不必要的,因为scanf返回读取的对象数,1将使while循环成为真。 是确保读取的元素数量正好为1还是完全多余的原因?

scanf中的格式说明符,用于C中的bool数据类型

我在C std99中使用bool数据类型,其定义在中定义。 现在我希望用户给我输入。 我必须在scanf中使用什么格式说明符来从用户输入1字节的布尔值,然后在我的程序中操作它。

在C中动态指定scanf的最大字符串长度(如printf中的“%* s”)

我可以使用这种技术指定scanf读取buffer的最大字符数: char buffer[64]; /* Read one line of text to buffer. */ scanf(“%63[^\n]”, buffer); 但是如果我们在编写代码时不知道缓冲区长度怎么办? 如果它是函数的参数怎么办? void function(FILE *file, size_t n, char buffer[n]) { /* … */ fscanf(file, “%[^\n]”, buffer); /* WHAT NOW? */ } 此代码容易受到缓冲区溢出的影响,因为fscanf不知道缓冲区有多大。 我记得以前见过这个,并开始认为这是解决问题的方法: fscanf(file, “%*[^\n]”, n, buffer); 我的第一个想法是”%*[*^\n]”表示最大字符串大小传递参数(在本例中为n )。 这就是printf *的含义。 当我检查scanf的文档时,我发现它意味着scanf应该丢弃[^\n] 。 这让我有些失望,因为我认为能够为scanf动态传递缓冲区大小是一个非常有用的function。 有什么办法可以动态地将缓冲区大小传递给scanf吗?

sscanf不移动,每次都扫描相同的整数

我有一个包含整数的字符串,我试图将所有的内容放入另一个数组中。 当sscanf找不到int我希望循环停止。 所以,我做了以下事情: int i; int getout = 0; for (i = 0; i < bsize && !getout; i++) { if (!sscanf(startbuffer, "%d", &startarray[i])) { getout = 1; } } //startbuffer is a string, startarray is an int array. 这导致startarray所有元素都是startarray中的第一个char。 sscanf工作正常但它不会移动到下一个int它只停留在第一个位置。 知道什么是错的吗? 谢谢。

读取String中的fscanf问题

我正在读一个.txt文件。 我正在使用fscanf来获取格式化的数据。 我遇到问题的这条线是这样的: result = fscanf(fp, “%s”, ap->name); 这是好的,直到我有一个空格的名称,例如:St Ives所以我用它来读取空白区域: result = fscanf(fp, “%[^\n]s”, ap->name); 但是,当我尝试读取名字(没有空白区域)时,它只是不起作用并且弄乱了其他的fscanf。 但我使用[^ \ n]它在我正在使用的不同文件中工作正常。 不知道发生了什么。 如果我在fscanf的位置使用fgets,我会在变量中得到“\ n”。 编辑// 好的,如果我使用: result = fscanf(fp, “%s”, ap->name); result = fscanf(fp, “%[^\n]s”, ap->name); 这允许我读入没有空格的字符串。 但是当我得到一个带有空格的“名字”时它不起作用。

Scanf Skip扫描字符

我的问题是跳过了字符的scanf并且没有检查扫描字符以查看我是否要再次重复该程序,为什么会发生这种情况呢? #include #include int main() { int number,check; char rep; printf(“Program to check if number is even or odd”); while( (rep!=’N’) || (rep!=’n’) ) { printf(“\n\nPlease enter the number: “); scanf(“%d”,&number); check = number%2; if(check != 0) printf(“\nNumber is odd.”); else printf(“\nNumber is even.”); printf(“\n”); printf(“Do you want to enter number again?\nY=yes\tN=no\n”); scanf(“%c”, &rep); } […]

为什么第二次扫描在我的程序中不起作用?

scanf(“%d%c”,&size,&chara); 但是单独的scanf用于字符输入不起作用。 我在代码中显示了这些内容。 这是为什么? void squareCustomFill(int size, char chara); int main(void) { int size,i,k; char chara; printf(“Enter size of square: “); //This works scanf(“%d %c”,&size,&chara); //printf(“Enter fill character: “); BUT WHY DOES NOT THIS WORK?? //scanf(“%c”,&chara); squareCustomFill(size,chara); return 0; } void squareCustomFill(int size, char chara){ int i,k; for (k=1;k<=size;k++){ for(i=1;i<=size;i++) printf("%c",chara); printf("\n"); } }

scanf无法正常工作。 需要从控制台读取双倍

我不确定我做错了什么,但我无法从控制台读取双重内容。 读它因某种原因工作正常。 我正在使用Xcode。 double n1; // get input from the user printf(“Enter first number: “); scanf(“%f”, &n1); printf(“%f”, n1); 无论我输入什么,这将始终打印0。