【问题标题】:Is it possible to run scanf like this? [closed]可以这样运行scanf吗? [关闭]
【发布时间】:2014-10-29 22:36:18
【问题描述】:
#include <stdio.h>
int main()
{
    int a,i,b,c,d,e;        
    array[5]["b","c","d","e"]; // defining input characters as int


    for(i=1;i<=a;i++)
    {
        for(j=0;j<=a;j++)
        {
            printf("Input number %d ",i);
            scanf("%d",&array[j]);   // every loop it goes diffrent valuable
        }
    }

    printf("Your numbers %d"b,c,d,e,);
    return 0;
}

我对您的评论进行了一些更改。 我想将每个数字分配给不同的变量。

【问题讨论】:

  • 程序有未定义的行为。
  • 既然可以使用数组,为什么会这样?
  • 这不是变量的工作方式。查找数组
  • array[5]["a","b","c","d","e"] array[j] // 在 scanf 中?并循环它
  • 请阅读有关 C 的书籍。如果您仍有疑问,请发布用有效 C 编写的代码。

标签: c scanf


【解决方案1】:

我认为这就是你想要做的:

int main() {

    int numList[5];
    int i;
    for(i = 0; i < 5; i++) {
        printf("Input number %d ",i);
        scanf("%d",&a[i]);
    }
    printf("Your numbers: ");
    for(i = 0; i < 5; i++) {
         printf("%d, ",a[i]);
    }
    printf("\n");
}

我用来打印的方法既快速又随意,但你也可以使用:

printf("Your numbers are: %d,%d,%d,%d,%d.\n",a[0],a[1],a[2],a[3],a[4]);

得到相同的结果。

对于 printf 函数:1 %d 表示您需要在引号后面列出 1 个整数,2 表示 2,依此类推。

绝对阅读数组,它们节省了很多时间。

还要注意第二个命令

for(i=1;i=a;i++)

将 a 的值分配给 i 这是无意义的。这也将始终导致 for 循环内容正在运行,除非它由于 Filipe Gonçalves 指出的未初始化而失败。

【讨论】:

  • 如果不是因为 2 个小技术错误,我会支持你的答案。首先,您需要scanf("%d", &amp;a[i]);(注意scanf() 的第二个参数中的地址运算符用法)。其次,for(i=1;i=a;i++) 只是 UB,因为 a 从未被初始化 - 所以,准确地说,你不能说循环会一直运行 - 它是 UB,任何事情都可能发生。
  • 感谢您的更正。已进行编辑。
【解决方案2】:
#include <stdio.h>

int main(){
    int **x;
    int i, a, b, c, d, e;
    int *vars[] = {&b, &c, &d, &e, &a};
    x = vars;
    for(x = vars; *x != &a; x++){
        scanf("%d", *x);
    }
    printf("%d, %d, %d, %d\n", b, c, d, e);
    return 0;
}

【讨论】:

  • 感谢您的解决方案。我不能给声誉:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2013-06-08
  • 1970-01-01
  • 2015-08-31
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多