【问题标题】:Can't get the input that I want to无法获得我想要的输入
【发布时间】:2014-10-07 12:29:11
【问题描述】:

我刚开始 C 编程,我是新手。我做了一些研究,但不幸的是找不到任何关于我的问题的信息。不能使用数组 BTW 这就是我不使用它的原因。

所以,我正在制作一个函数来打印与给定数量一样多的星星。但函数正在打印最后输入的数字。

#include <stdio.h>

int main(){

    void pstr(int *m){
        int j;
        for(j = 0; j < *m; j++)
            printf("*");
            printf("\n");
    }

    int i;
    int number = 9;
    int n1, n2, n3, n4, n5, n6, n7, n8, n9;

    printf("Enter 9 numbers (all less than 50):\n|1-2-3-4-5-6-7-8-9|\n");   
    printf("|-----------------|\n ");        
    for(i=0; i < number; i++)                                           
        scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9);

    pstr(&n1);

    system("PAUSE");
}

我正在尝试打印第一个输入数字,但它正在写入最后一个 (n9)。对不起我的英语,谢谢。

【问题讨论】:

  • 我很惊讶这是编译的,因为在 C 中,一个函数不能被埋在另一个函数中。 IE。将 pstr 函数移到 int main(void) 行之前

标签: c function input


【解决方案1】:

您的scanf() 格式字符串错误。

scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9);

你必须有一个% 每次转化,所以 9 在你的情况下。这意味着for 毫无意义。

此外,您必须检查 scanf() 是否返回预期的成功转换次数,否则您不能依赖具有正确值的变量。

【讨论】:

  • 谢谢,但是当我再添加 8 个 %s 时,它会打印第二个输入减去 1。
  • @HalilM,嗯,%s 不应该是 %d 吗?
【解决方案2】:
 scanf("%d %d %d %d %d %d %d %d %d ", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9);

虽然更好的方法是使用数组和循环。由于您是新手,我认为您还不知道。暂时使用这个。

【讨论】:

    【解决方案3】:

    将数字声明为:

    int n[9];
    

    而不是

    int n1, n2, n3, n4, n5, n6, n7, n8, n9;
    

    然后将循环用作:

    for(i=0; i < number; i++)                                           
            scanf("%d", &n[i]);
    

    另外,在使用scanf之前,fflush输出缓冲区,

    fflush(stdout);
    

    【讨论】:

    • OP 说“不能使用数组顺便说一句,这就是我不使用它的原因。”
    猜你喜欢
    • 2013-03-12
    • 2021-09-12
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2017-05-15
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多