【问题标题】:Why is my for loop not taking 9 inputs?为什么我的 for 循环不接受 9 个输入?
【发布时间】:2013-08-31 04:56:09
【问题描述】:

我的代码只需要 5 个值作为输入。?我做错了什么?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&arr[i][j]);
        }
    }
    return 0;
}

我应该如何纠正它?

【问题讨论】:

  • 输入样本也不错。

标签: c loops for-loop


【解决方案1】:

您可以改为使用gets(arr[i][j])

而不是scanf("%c",&amp;arr[i][j]);

这将完美地工作。在 C 中使用 gets() and puts() 函数而不是 printf()scanf() 函数来处理字符串和字符是个好主意

【讨论】:

  • 没有。首先,gets 需要一个char * 类型的参数。其次,gets 很危险,应始终避免使用fgetsgets_s。第三,printf 用于格式化输出,puts 在很多情况下很难替代。
  • o 实际上它是getc 而不是gets 并且对于上述程序和相关程序总是可以正常工作。
【解决方案2】:

第一个输入存储在 arr[0][0] 中,然后当您按下回车键时,它存储在 arr[0][1] 中,而当您认为您正在输入第二个字符时,实际上您正在输入第三个输入。试试下面的代码,看看你是否没有得到它。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
        printf("Input array [%d][%d]",i,j);
            scanf("%c",&arr[i][j]);
        }
    }
}

至于更正,您需要一个 scanf(" %c",&amp;arr[i][j]); 在 %c 前面的空格来消耗 \n

希望它能回答你的问题

【讨论】:

    【解决方案3】:

    你可以使用 fflush(stdin)

    char arr[3][3];
    int i,j,n;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&arr[i][j]);
            fflush(stdin);
        }
    }
    

    【讨论】:

    • fflush(stdin) 是未定义的行为。它可能适用于特定的实现,但不可移植。
    • 这是未定义的行为,因为 fflush 旨在在输出流上调用。看看here
    【解决方案4】:

    改变

    scanf("%c",&arr[i][j]);
    

    scanf(" %c",&arr[i][j]);.
    

    注意在说明符之前给定的空间,当您按下回车键时,它会消耗标准输入缓冲区中的\n

    每个\n 都作为输入工作,从输入空间占用您的空间。

    【讨论】:

    • 成功了。但是为什么在“%d”的情况下不会出现这个问题呢?
    • @user2556926 包括 %d 在内的大多数格式说明符都会跳过空格,但 %c 不会。
    【解决方案5】:

    它应该可以工作,但请注意%c 只会读取一个字符。空格不会像其他(更“高级”)格式说明符那样被抑制,所以如果你用任何类型的空格分隔字符,这些字符将被读取而不是实际字符。

    另外注意你应该检查scanf()的返回值,如果没有合适的输入,它可能会失败。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2019-08-20
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多