2010-12-03 3 views
-1

ребята ... может у помочь мне применить таНос в моем коде ... вот мой код:Применение таНос

#include<stdio.h> 
#include<stdlib.h> 
struct studentinfo{ 
     char id[8]; 
     char name[30]; 
     char course[5]; 
}s1; 
main(){ 
    int i; 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 

    struct studentinfo s1; 
    struct studentinfo array[3]; 
    for (i =0; i<1; i++){ 
     printf("Enter Student ID: "); 
     scanf("%s", s1.id); 
     fflush(stdin); 
     printf("Enter Student Name: "); 
     gets(s1.name); 
     fflush(stdin); 
     printf("Enter Student Course: "); 
     scanf("%s", s1.course); 

     fprintf(stream, "\n%s,\t%s,\t%s", s1.id, s1.name, s1.course); 
    } 
     fclose(stream); 
    getch(); 
} 

я знаю таНос alots больше места, чем обычный массив ... но все равно им с трудное время, используя его ... большое спасибо :)

+2

По крайней мере * * попробовать ... –

+0

'для (я = 0; я <1, я ++)' ?! –

+0

Какое желаемое поведение вы пытаетесь получить? – SingleNegationElimination

ответ

3

Перед тем, как вам помочь, не забудьте сделать это:

Тогда:

  • Скажите нам, что вы хотите достичь;
  • Сообщите нам, что на самом деле происходит;
  • Сообщите нам, что вы попробовали;
  • Сообщите нам, что вас беспокоит;
  • Сообщите нам, что вы не понимаете.

Компилятор и программные выходы помогают также.

PS: Вид ожидания голосования, но это необходимо сделать.

0

Я думаю, что вы находитесь в том же учреждении, что и @newbie. Новичок, однако, сделал попытку сам и задал разумные вопросы.

Посмотрите Am i using malloc properly?

0
#include<stdio.h> 
#include<stdlib.h> 
struct studentinfo{ 
     char id[8]; 
     char name[30]; 
     char course[5]; 
}; 
main(){ 
    int i; 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 

    struct studentinfo * s1 = (struct studentinfo *)malloc(sizeof(struct studentinfo));  

    struct studentinfo * array = (struct studentinfo *)malloc(sizeof(struct studentinfo) * 3); 
    for (i =0; i<1; i++){ 
     printf("Enter Student ID: "); 
     scanf("%s", s1->id); 
     fflush(stdin); 
     printf("Enter Student Name: "); 
     gets(s1->name); 
     fflush(stdin); 
     printf("Enter Student Course: "); 
     scanf("%s", s1->course); 

     fprintf(stream, "\n%s,\t%s,\t%s", s1->id, s1->name, s1->course); 
    } 
     fclose(stream); 
    getch(); 
} 

BTW:
- fflush (стандартного ввода) не является переносимым.
- gets() является опасным, замените его на fgets()

+0

Вы не должны указывать возвращаемое значение malloc: http://en.wikipedia.org/wiki/Malloc#Casting_and_type_safety. Кроме того, предпочитайте sizeof (* s1) в sizeof (struct studentinfo), так как это мешает вам переделать sizeof, если вы измените тип своей переменной. Указатели - ваши друзья. – haylem

+0

Спасибо за просмотр кода копирования/вставки. –

0

Вам не нужно использовать malloc в вашем примере, потому что вы знаете, сколько учеников у вас будет при разработке (я думаю, потому что вы за цикл заканчивается фиксированным значением). Когда вы будете знать его только во время выполнения, вы можете:

studentinfo *array;  // declare it as a pointer 

// get the number of students (num) in some way 

array = (studentinfo *) malloc(num * sizeof(studentinfo)); 

// use it as a normal array 

free(array) // don't forget to free! 

Это работает, потому что массивы и указатели считаются то же самое.

PS: Извините за мой английский, пожалуйста, будьте терпеливы ... :)