c - 如果我在末尾添加新行 '\n',scanf 将如何工作

标签 c newline scanf

#include <stdio.h>
int main(){

    int a,b,c;

    scanf("%d%d%d\n",&a,&b,&c);
    printf("%d %d %d",a,b,c);

    return 0;
}

看,我正在接受 3 个输入并打印 3 个输出...但是当我在 scanf 函数末尾添加了一个新行时,我必须提供 4 个输入才能获得 3 个输出(我得到了作为输入给出的前 3 个输入) )... scanf 在这里如何工作? 在这种情况下:

#include <stdio.h>  

int main(){ 

    double n[2][5]; int i,j; 

    for (i=0;i<=1;i++){ 

        for(j=0;j<=4;j++){ 

            scanf("%lf\n",&n[i][j]); 
            printf("Class=%d Roll=%d Marks=%lf\n",i+6,j+1,n[i][j]); 

        } 
    }

    return 0; 
}

看,我必须提供 11 个输入才能获得 10 个输出...每次我提供输入时,我都会将前一个输入作为输出... scanf 在这里如何工作?

最佳答案

scanf 格式的白色字符与输入中的白色字符序列匹配,直到出现非白色字符为止。

换行符是一个白色字符,这解释了程序的行为。这意味着,如果您的 scanf 格式以换行符终止,则直到在最后一次解析的输入后看到额外的非空白字符时,它才会完成。

关于c - 如果我在末尾添加新行 '\n',scanf 将如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033265/

相关文章:

c - 为什么这段代码可以工作并且不会产生段错误?

reporting-services - SSRS 表达式中的换行符

c - scanf() 将换行符保留在缓冲区中

c - 在 C 中将一个函数内联到另一个内联函数中

C - 指针算术

C 将变量值设置为\n

regex - PowerShell正则表达式在换行符附近不匹配

c - 通过 ID 在文本文件中搜索名称

c - fscanf 的奇怪异常和变量声明的顺序

c - 为结构体中的灵活数组分配内存