Mentor for C self study wanted

Derek Ragona derek at computinginnovations.com
Tue Oct 23 15:18:37 PDT 2007


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 <cpghost at cordula.ws>:
> > > On Tue, 23 Oct 2007 20:44:52 +0200
> > >
> > > Harald Schmalzbauer <h.schmalzbauer at omnisec.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

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
MailScanner thanks transtec Computers for their support.



More information about the freebsd-questions mailing list