2010-12-03 3 views
0

Я новичок в C .. и до сих пор возникают проблемы в синтаксисе, надеюсь, что вы можете мне помочь ... потому что я застрял в этом кодепутать C синтаксис

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main(void){ 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 
    /*some of initialization were used for testing purposes only*/ 

    char arr[5]; 
    char arr2[5]; 
    int i; 
    char name[3]; 
    char course[5]; 

    printf("enter details: "); 
    scanf("%s", arr2); 

    while(!feof(stream)){ 
     fgets(arr, 100, stream);//i am confused if the line capture was stored at arr[0] 
     if(strcmp(arr, arr2)==0){//i want to compare 
      printf("success");//testing 
     } 
     printf("%s", arr);//i wonder does fgets just overwrites the new line to arr[0] 
    } 

    fclose(stream); 

    getch(); 
} 

спасибо ребята .. .

+1

Попробуйте форматировать ВСЕ код в качестве кода, это поможет нам вам помочь. И задайте конкретные вопросы - все, что вы нам сказали, это то, что у вас все еще возникают проблемы с синтаксисом. Такой вид приглашает ответ «так прочитал один из многих отличных онлайновых учебников или книг, которые объясняют синтаксис Си». – 2010-12-03 09:29:40

+0

В чем проблема? что вы хотите сделать? какие ошибки вы получаете? – Muggen 2010-12-03 09:30:18

+0

@ muggen: на самом деле мне было поручено сделать информационную систему для учеников ... и у меня возникли проблемы при редактировании одной из строк ... нам было поручено спросить у пользователя идентификатор студента и позже отредактировать информацию. . Я думаю, чтобы захватить первую строку, а затем сравнить ее со входом пользователя ... надеюсь, что вы можете мне помочь ... thnx заранее – iamanapprentice 2010-12-03 09:45:24

ответ

2

Если у вас есть существующий файл ... и в вашем файле есть данные. то вы можете проверить, имеются ли в файле данные, которые вы ввели, или нет. Я не уверен, что это то, что вы хотите.

пример, если вы набрали ... love и файл также содержит точное слово ... love (на одной линии) тогда он будет печатать «успех».

Если данные, которые вы ввели, не были сохранены в файле, они будут добавлены в файл (на следующей строке).

int main(void){ 

char arr[5]; 
char arr2[5]; 
int i; 
int n=0; 

FILE *stream = NULL; 
FILE *append = NULL; 
stream = fopen("studentinfo.txt", "rt"); 
append = fopen("studentinfo.txt", "a+"); 

printf("enter details: "); 
scanf("%s", arr2); 

while(!feof(stream)){ 
    fgets(arr, 6, stream); 
    if(strcmp(arr, arr2)==0){ 
     printf("success"); 
    } else n=-1; 
} 
if (n==-1){ 
    fprintf(append, "%s\n", arr2); 
} 
fclose(stream); 
fclose(append); 
system("pause"); 
} 
6
  1. вы открываете studentinfo.txt для добавления, но затем чтение из него (и вы не проверить открытый удалось
  2. вы выделили 5 символов для обр, но дочитать до 100 символов в него с помощью fgets. Это приведет к переполнению и приведет к повреждению памяти
  3. Вы выделили 5 символов для arr2, но прочитали в нем суровое количество символов - это переполнит и приведет к повреждению памяти
  4. Fgets читает символы в памяти, начиная с обр. arr [0] - первый символ. & arr [0] - это то же самое, что и arr
  5. Что такое getch() в конце?
  6. Кроме того, «a +» позиционирует поток в конце файла, поэтому вы ничего не сможете прочитать.
+0

5.вероятно, чтобы остановить немедленное прекращение программы и сделать ее способной увидеть «успех» – Muggen 2010-12-03 09:34:42

1
  1. Я не уверен, почему вы открываете поток с +, потому что вы никогда не писать в него. Может быть, вы хотите убедиться, что файл существует, даже если длина 0? Вы все равно должны проверить, что открытое все же удалось.

  2. Затем вы считываете 100 символов в массив из 5 байтов, чтобы получить серьезную перезапись памяти, если файл действительно содержит это число.

  3. Сканирование также небезопасно, так как пользователь может вводить слишком много символов (они фактически ограничены 4, потому что есть NULL-терминатор, который читается).

  4. В конце вы, кажется, записываете последнюю строку случайным образом, если пользователь не вводил соответствующую строку из файла.

Смежные вопросы