C FGET和阵列:说明

C FGET和阵列:说明,c,C,关于下面的C代码,我有两个问题 代码中的clear()的用途是什么?我想 这样我就可以按enter键“停止”输入11个字符 myarray需要myarray,但我似乎可以为 也成功地执行了scanf调用 fgets是否总是用“\n”关闭缓冲区?如果我放11呢 十个而不是十个?函数如何知道结束 带“\n”的字符 #包括 空白清除() { 而(getchar()!='\n'); } int main(){ int值; 无符号整数秒; char-myarray[11]; printf(“输入1

关于下面的C代码,我有两个问题

  • 代码中的
    clear()
    的用途是什么?我想 这样我就可以按enter键“停止”输入11个字符 myarray需要
    myarray
    ,但我似乎可以为 也成功地执行了
    scanf
    调用
  • fgets
    是否总是用“\n”关闭缓冲区?如果我放11呢 十个而不是十个?函数如何知道结束 带“\n”的字符
  • #包括
    空白清除()
    {    
    而(getchar()!='\n');
    }
    int main(){
    int值;
    无符号整数秒;
    char-myarray[11];
    printf(“输入10个字符:”);
    fgets(myarray,11,标准输入法);
    清除();
    printf(“输入一个介于-50000和50000之间的整数:”);
    scanf(“%d”,和值);
    printf(“输入一个介于0和100000之间的无符号整数:”;
    scanf(“%ud”、&second);
    ...
    
    clear()在代码中的作用是什么

    clear()
    的目的是删除
    stdin
    缓冲区中的所有剩余字符,以防输入的字符串大于
    11-1

    fgets是否总是用“\n”关闭缓冲区?如果我将
    11
    字符而不是10个字符,该怎么办

    如果输入流的大小为
    11
    个字符或更大,则不会读取
    11-1
    ,不会读取
    11
    个字符及以上字符,在
    myarray[]中留下一个空格
    对于
    '\0'
    空终止符,它们将与
    '\n'
    一样保留在缓冲区中,因此需要
    清除()

    示例:

    如果输入的字符串是
    “qwertyuiopa”
    q w w y u i o p\0
    将是您的字符数组,
    a\n
    将保留在
    stdin
    缓冲区中

    函数如何知道以“\n”结尾字符

    fgets
    在读取第11-1
    字符后立即停止读取,这是由第二个参数决定的,与字符无关,或者如果找到
    '\n'
    ,在这种情况下,所有字符都被读取,包括
    '\n'
    ,并将存储在
    myarray[]

    示例:

    输入
    “qwerty”
    ,字符数组将
    q w e r t y\n\0
    ,stdin缓冲区将为空

    最后一点要注意的是,为了确保完全正确,
    clear()
    函数应该考虑
    EOF

    int c;
    while((c = getchar()) != '\n' && c != EOF);
    

    混合使用
    fgets()
    scanf()
    通常是代码不好的标志。建议停止使用
    scanf()
    ,直到您理解为什么混合使用它们是不好的。我不理解以下位置:“C标准不要求剩余字符留在缓冲区中”.
    fgets
    是一个,因此它将
    fgetc
    从输入流中检索一个字符并前进流位置指示器。这似乎会使输入流中的字符保持不变;文本流允许一些更改,但这似乎不能证明“未被强制保留在缓冲区中”是正确的你是说该标准允许IO流中的字符自动消失吗?Hmmm:建议“第11个字符替换为
    '\0'
    ”-->“永远不会读取第11个字符,在
    myarray[]
    中为
    '\0'
    留出空间。”@exnihilo这意味着我在标准中找不到任何东西。fgets要求我不要简单地读取流中的所有字符,例如,丢弃所有多余的字符,让缓冲区为空,你的链接澄清了这一点,我没有给予足够的重视。你的建议是一个明显的改进,我很高兴接受,ty。这是对文本流可能与
    fgets()最相关:
    
    int c;
    while((c = getchar()) != '\n' && c != EOF);