【问题标题】:Struct problems结构问题
【发布时间】:2016-06-05 20:57:54
【问题描述】:
typedef struct{
    char noreg[11];
    float IPK;
}Mahasiswa; 

void showDataArr(Mahasiswa *A, int ukuran){
    int i;  
    for(i=0;i<ukuran;i++){  
        printf("Mhs ke %d\n",i+1);
        printf("\tNoreg : %s\n",A[i].noreg);
        printf("\tIPK   : %.2f\n",A[i].IPK);
    }
}

void isiDataArr(Mahasiswa *A, int ukuran ){
    int i;
    char temp[20];
    for(i=0;i<ukuran;i++){  
        printf("Masukan Noreg : ");
        scanf ("%[^\n]",A[i].noreg);
        printf("Masukan IPK   : ");scanf("%f",&A[i].IPK);
        getchar();
    }
}

int n;
main(){

    Mahasiswa PTIK[n];

    printf("masukan jumlah data :");
    scanf("%d",&n); //this part
    isiDataArr(PTIK,n);
    printf("\n");
    showDataArr(PTIK,n);
    getch();
}

你好,我有那个代码,我的问题是当我运行它时,scanf 会使程序绕过第一个数组输入,“masukan no reg”将留空 like this 但是其余数组将正常运行

【问题讨论】:

  • 说真的,发布图像链接比将文本粘贴为文本更容易? 将文本发布为文本,而不是图像!
  • 如果 n 为 0...?!你认为第一行代码会做什么?
  • Mahasiswa PTIK[n]。这显然是错误的,因为 n 在该声明点为 0。所以你的数组大小为 0。
  • 另外,它应该是int main(void)。你的编译器应该抱怨这个。
  • 你应该得到一堆“缺少声明/原型”(或类似的)警告。提供一个minimal reproducible example,它编译时没有警告。运行产生警告的代码是没有用的(对于初学者)。

标签: c struct scanf


【解决方案1】:

如果我稍微改变你的程序,它会做我认为你想要的:

#include<stdio.h>

typedef struct {
    char noreg[11];
    float IPK;
} Mahasiswa;

void showDataArr(Mahasiswa *A, int ukuran) {
    int i;
    for (i = 0; i < ukuran; i++) {
        printf("Mhs ke %d\n", i + 1);
        printf("\tNoreg : %s\n", A[i].noreg);
        printf("\tIPK   : %.2f\n", A[i].IPK);
    }
}

void isiDataArr(Mahasiswa *A, int ukuran) {
    int i;
    char temp[20];
    for (i = 0; i < ukuran; i++) {
        printf("Masukan Noreg : ");
        scanf("%s", A[i].noreg);
        getchar();
        printf("Masukan IPK   : ");
        scanf("%f", &A[i].IPK);
        getchar();
    }
}

int n;

int main(void) {
    printf("masukan jumlah data :");
    scanf("%d", &n); //this part
    Mahasiswa PTIK[n];
    isiDataArr(PTIK, n);
    printf("\n");
    showDataArr(PTIK, n);
    //getch();
}

测试

masukan jumlah data :2
Masukan Noreg : 123qwe
Masukan IPK   : 123
Masukan Noreg : 234wer
Masukan IPK   : 234

Mhs ke 1
    Noreg : 123qwe
    IPK   : 123.00
Mhs ke 2
    Noreg : 234wer
    IPK   : 234.00

【讨论】:

  • 是的,稍后声明数组已修复它,谢谢,您介意我问 main() 和 int main(void) 之间的区别,因为它并没有真正显示出任何区别吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多