List Info

Thread: Re: Mentor for C self study wanted




Re: Mentor for C self study wanted
country flaguser name
United Kingdom
2007-10-23 17:32:53
Derek Ragona wrote:
> At 04:24 PM 10/23/2007, Harald Schmalzbauer wrote:
>> Am Dienstag, 23. Oktober 2007 22:24:54 schrieb Bill
Moran:
>> > In response to cpghost <cpghostcordula.ws>:
>> > > On Tue, 23 Oct 2007 20:44:52 +0200
>> > >
>> > > Harald Schmalzbauer
<h.schmalzbaueromnisec.de> wrote:
>> > > > The first one was for example the
attached code: Why does it 
>> segfault?
>> > >
>> > > Mailman ate the attachment... Can't see
it here.
>> >
>> > I may be out of line, but I think if you're
using FreeBSD as your
>> > learning platform, that it wouldn't be a
problem to ask this list.
>> >> Harald Schmalzbauer wrote:
>> > > Am Dienstag, 23. Oktober 2007 21:43:52
schrieben Sie:
>> > >>> Hello Aryeh,
>> > >>>
>> > >>> I'm willing to pay fair fees, but
are you interested in "micro 
>> payment"
>> > >>> ;) ?
>> > >>
>> > >> For other reasons I love micro
payments.
>> > >>
>> > >>> Serious, I'll have the one or
other short question per week (I'm
>> > >>> usually busy, just making spare
time lessons from my book (UTC-1 
>> spare
>> > >>> time)).
>> > >>
>> > >> Just so I know what level to present
on what is your background 
>> in CS
>> > >> and programming?
>> > >
>> > > CS??
>> > > I'm able to solve problems analytically,
but I don't know any 
>> language
>> > > really well.
>> > > I know bourne shell, csh, pascal, and
basic. And a tiny bit asm, but
>> > > that's been on ZX81.
>> >
>> > Although, you'll have to include your code
inline to get past the
>> > sanitizers.
>>
>> Thanks all,
>>
>> here was my example, just for completeness, I found
mentors for my needs.
>>
>> Thanks a lot to all!
>>
>>
>> #include <stdio.h>
>>
>> void main()
>> {
>>   short nnote;
>>
>>   // Numerischen Notenwert einlesen
>>   printf("Bitte numerischen Schulnotenwert
eingeben: ");
>>   scanf("%d",&nnote);
>>
>>   switch (nnote)
>>   {
>>     case 1: printf("Die Note %d entspricht
sehr gut.",nnote);
>>     break;
>>     case 2: printf("Die Note %d entspricht
gut.",nnote);
>>     break;
>>     case 3: printf("Die Note %d entspricht
befriedigend.",nnote);
>>     break;
>>     case 4: printf("Die Note %d entspricht
ausreichend.",nnote);
>>     break;
>>     case 5: printf("Die Note %d entspricht
mangelhaft.",nnote);
>>     break;
>>     case 6: printf("Die Note %d entspricht
ungenügend.",nnote);
>>     break;
>>     default: printf("%d ist keine zulässige
Schulnote!");
>>   }
>>   printf("n");
>> }
>>
>> P.S.:
>> I found that declaring nnote as int soleves my
problem, but I couldnÄt
>> understand why.
>> Another one was the result of default: nnote was
-1077942208 instead 
>> of 9 for
>> example.
> 
> if you check the man page on scanf:
>  d     Matches an optionally signed decimal integer;
the next pointer must
>            be a pointer to int.
> 
> You shouldn't try to put a short into an int.  Always
declare the 
> correct size for variables.  Your segv is because scanf
was trying to 
> put an int where it won't fit.
> 
> You will get the same result if you go off the end of
an array.
> 
>         -Derek
> 

It's well worth increasing the number of warnings enabled
when writing C 
code, to catch any errors early on.  -Wall catches this sort
of mistake.

Compiling your code gives the following output:

 > gcc -Wall test.c -o test
test.c:4: warning: return type of 'main' is not 'int'
test.c: In function 'main':
test.c:9: warning: format '%d' expects type 'int *', but
argument 2 has 
type 'short int *'

--
Bruce Cran
_______________________________________________
freebsd-questionsfreebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-que
stions
To unsubscribe, send any mail to
"freebsd-questions-unsubscribefreebsd.org"

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )