【问题标题】:How to use scanf in for loop如何在for循环中使用scanf
【发布时间】:2023-03-07 03:29:01
【问题描述】:

每当我尝试读取输入时

for (int i = 1; i <= 10; ++i) {
    scanf("(%c, %d, %d, %d)",&charv,&intv1,&intv2,&intv3);
}

我只能到达scanf() 一次。有什么问题?

输入 -> (P, 1, 2, 3)......(P, 2, 3, 12)

【问题讨论】:

  • 我希望在您的实际代码中,您将实际变量作为参数,而不是类型。除非您发布实际和工作代码以及输入,否则我们将无法真正为您提供帮助。
  • 消息?例外?你的变量之一是i
  • 是的,我确实有实际变量,这些类型只是一个占位符。这也是实际代码....
  • 请不要以使现有 cmets 和答案无效的方式编辑问题。

标签: c input formatting scanf


【解决方案1】:

您对scanf() 的使用是错误的。您必须提供指向变量的指针 来存储scanf() 读取的值。你需要像下面这样使用它

for (int i = 1; i <= 10; ++i) {
    scanf("%c, %d, %d, %d",&charVar,&intvar1,&intVar2,&intVar3);
}

编辑:

第 1 点:提供的格式字符串应该完全与输入匹配。否则,scanf() 将失败。如果您输入的格式不是 (&lt;char&gt;, &lt;int&gt;.... ,它将失败。缺少(), 中的任何一个都会导致提供的格式字符串与输入不匹配,并使scanf() 停止扫描。强烈建议检查scanf() 的返回值以确保成功。

第 2 点:为避免读取之前按 ENTER 键存储的 \n,您应该在 %c 之前添加一个前导空格。所以,你可以使用类似的东西

scanf(" %c, %d, %d, %d",&charVar,&intvar1,&intVar2,&intVar3);
       ^
       |
     Notice here

【讨论】:

  • int、char、char、char 只是占位符,我在实际代码中有实际变量
  • 谢谢@Sourav Ghosh,非常有帮助
【解决方案2】:
scanf("(%c, %d, %d, %d)",&charvar,&intvar1,&intvar2,&intvar3);

应该是

scanf(" %c, %d, %d, %d",&charvar,&intvar1,&intvar2,&intvar3);

注意%c 之前的空格,如果存在则忽略换行符。如果您的输入没有用逗号分隔

scanf(" %c %d %d %d",&charvar,&intvar1,&intvar2,&intvar3);

【讨论】:

    【解决方案3】:

    就像 Sourav Ghosh 和 Gopi 说的,scanf 不能用这种语法正常工作

    scanf("(%c, %d, %d, %d)",&char,&int,&int,&int);
    

    应该是

    scanf("%c %d %d %d",&char,&int,&int,&int);
    

    但是你可以先读取一个字符串,然后使用sscanf。

    试试这个代码:

    char ch;
    int a, b, c, i;
    
    char teste[256];
    
    for(i=0;i<10;i++){
        fgets(teste, 256, stdin);
        sscanf(teste, "(%c, %d, %d, %d)", &ch, &a, &b, &c);
        printf("%c %d %d %d\n", ch, a, b, c);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多