From: Nejat AYDIN (nejataydin@superonline.com)
Date: Thu 05 Jan 2006 - 05:13:40 EET
Alper KANAT wrote:
> Merhaba,
>
> Ufak bir proje için C'de bir program yazmam gerekiyor. Kullanıcının
> girdiği bir cümleyi bir array'in içine koymak istiyorum. scanf boşluk
> karakterini almadığı için benim için sorun oluyor. gets kullandığımda
> nedense program giriş almadan sonlanıyor.
Asla ve asla gets kullanma. ASLA!
> Bana birşey önerebilir misiniz ? scanf'in [^]0-9-] gibi bir seçeneği var
> ama bunu uygun bir şekilde ayarlayamadım.
>
> Bir de ben bir struct yapısı kurmuştum. Şöyle:
>
> struct bookinfo
> {
> char name[100];
> char author[100];
> char publisher[100];
> char isbn[100];
> };
>
> bunu şu şekilde tanımlarsam:
>
> struct bookinfo
> {
> char *name;
> char *author;
> char *publisher;
> char *isbn;
> };
> scanf ile değer almaya kalktığımda parçalama arızası veriyor.
Büyük ihtimalle işaretçilerin doğru yere işaret etmiyorlardır
veya hiç yer ayırmamışsındır.
> Direk
> atama yaparsam kabul ediyor.
> Bu 2 sorunla ilgili yardıma ihtiyacım var, teşekkür ederim..
En basitinden şöyle bir fonksiyon yazabilirsin. Fonksiyonda
her bir alanın farklı bir satırda girildiği kabul ediliyor.
#include <stdio.h>
#include <string.h>
struct bookinfo
{
char name[100];
char author[100];
char publisher[100];
char isbn[100];
};
int read_bookinfo (struct bookinfo *bi)
{
char *p;
if (fgets(bi->name, sizeof bi->name, stdin) == NULL)
return 0;
if ((p = strchr(bi->name, '\n')) == NULL)
/* Too many character entered or EOF encountered before \n */
{
/* discard the rest of line */
int c;
while ((c = getchar()) != EOF && c != '\n');
}
else
*p = '\0';
if (fgets(bi->author, sizeof bi->author, stdin) == NULL)
return 0;
if ((p = strchr(bi->author, '\n')) == NULL)
/* Too many character entered or EOF encountered before \n */
{
/* discard the rest of line */
int c;
while ((c = getchar()) != EOF && c != '\n');
}
else
*p = '\0';
if (fgets(bi->publisher, sizeof bi->publisher, stdin) == NULL)
return 0;
if ((p = strchr(bi->publisher, '\n')) == NULL)
/* Too many character entered or EOF encountered before \n */
{
/* discard the rest of line */
int c;
while ((c = getchar()) != EOF && c != '\n');
}
else
*p = '\0';
if (fgets(bi->isbn, sizeof bi->isbn, stdin) == NULL)
return 0;
if ((p = strchr(bi->isbn, '\n')) == NULL)
/* Too many character entered or EOF encountered before \n */
{
/* discard the rest of line */
int c;
while ((c = getchar()) != EOF && c != '\n');
}
else
*p = '\0';
return 1;
}
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama