C While Loop not working like C++


 
Thread Tools Search this Thread
Top Forums Programming C While Loop not working like C++
# 1  
Old 08-10-2011
C While Loop not working like C++

Hi new to C give me a hand thank.

Code:
do
{
          bzero(input,256);
          printf("Please enter the country name!"); 
          scanf("%[^\n]s",input); //& character is essential for scanf(), %f = float, %399s as the last character to be the null character ('\0').  
}
while (strcmp(end,input) != 0);//Compare two strings

It work it can loop but it will skip the scanf when it go into loop. Thank ppl
# 2  
Old 08-10-2011
It's not a C thing, it's a scanf thing. scanf leaves the character it stops at in the buffer so next loop, it fails instantly!

Don't use scanf to read lines, that's overkill anyway -- use the purpose-built line reading function: fgets. fgets(buf, size, handle); Be warned that it leaves in the ending newline.

If you need to parse values from individual lines in a scanf-like manner, read lines with fgets() and parse them with sscanf(buffer, "command", &val); Does the same thing without the buffer problems.

You should also be checking fgets' return value to see if you hit EOF before you hit the ending word, otherwise your code might end up in an infinite loop.

It's unnecessary to bzero your buffer every time. Nearly all stdio functions add the null terminator for you. Exceptions include strncpy and memcpy.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 08-10-2011
Hi ALL!!
I solve my own qn...
Code:
scanf("%[^\n]s",input);

put a space before the % and the loop will go in to scanf =) hope it help people in further need
# 4  
Old 08-10-2011
Quote:
Originally Posted by GQiang
Hi ALL!!
I solve my own qn...
Code:
scanf("%[^\n]s",input);

put a space before the % and the loop will go in to scanf =) hope it help people in further need
That's because the space will accept any whitespace, including \n.

It's still overkill to use scanf for individual lines. I suggest you read my above post.
# 5  
Old 08-10-2011
fget() have buffer problem like u say... it take in my whole buffer.. i dont understand your solution can give an example?? btw why say using scanf is overkill... i totally noob in C thank for your time =) really look forward to your ans
# 6  
Old 08-11-2011
scanf is overkill for reading lines one by one, because it's a pretty complicated text processing function which would have some overhead. It also has unwanted side-effects, as you discovered. fgets() is a purpose-built function that reads individual lines.

Code:
char buf[512];

// read lines one by one
while(fgets(buf, 512, fp) != NULL)
{
        int a,b,c;

        // Break the loop on the line END
        if(strcmp(buf, "END\n") == 0) break;

        // Ignore lines that aren't three numbers separated by spaces
        if(sscanf(buf, "%d %d %d", &a, &b, &c) != 3)
                continue;

       printf("scanf read %d %d %d\n", a, b, c);
}

Since sscanf isn't reading from your file, it can't leave junk in the buffer to foul you up later.

Last edited by Corona688; 08-11-2011 at 02:16 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

For-loop not working

Hello all, I would like to unzip some files with a for-loop. Is there anyone who could tell me how I should do this - in a correct way? for file in $(ls); do echo gzip -d < $file | tar xf -; done The problem is the pipe - I believe. But how could I do it? I need it for the command... (4 Replies)
Discussion started by: API
4 Replies

2. UNIX for Dummies Questions & Answers

for loop not working

Hi, I have ten different files to extract. so I thought for loop will help me. but it's not working for me. Please advice what I am doing wrong. for INCI in 1 2 3 4 5 6 7 8 9 10 do tar -xvf Update_INCI11.10.002_lnx86_1of10.tar done second file name is... (3 Replies)
Discussion started by: samnyc
3 Replies

3. Shell Programming and Scripting

For loop not working

Hi All, For loop in ksh not working if it was given in the following method. simple script: for i in {1..4} do echo $i done Output: {1..4} Even below also not working :( Script: for (( c=1; c<=5; c++ )) do echo "Welcome $c times..." done Output: ./x.sh: 0403-057 Syntax error... (13 Replies)
Discussion started by: girish_satyam
13 Replies

4. Shell Programming and Scripting

while loop not working

hi everyone i am facing a very strange problem . please help me why my while loop is not working. below is my code #!/bin/ksh file=RCMC_ABC_999_080924_210813.DAR echo ${file} value=001 count=10 echo "abc" echo ${count} value=$((${value} + 1 )) echo ${value} while ] do echo... (3 Replies)
Discussion started by: aishsimplesweet
3 Replies

5. Shell Programming and Scripting

While loop not working

here we go.. While loop is not working file.. It also invokes one more shell scripts for which parameters need to passed on. while read line do #### #### We want to have a logfile for each load #### PLog="${LogDir}/${Script}.log"; #### ... (5 Replies)
Discussion started by: premkumardr
5 Replies

6. UNIX for Advanced & Expert Users

If loop is not working

The following piece of code is not running because it is fails to go inside the if condition. i want to create a directory if there is no directory in the input path. i am using Linux, by CENT. Please help. echo " Enter the path where you u want to extract the tar" read EXTRACT_PATH ls -ld... (12 Replies)
Discussion started by: toanilsharma1
12 Replies

7. UNIX for Dummies Questions & Answers

If then else loop not working

If then else segment of below code is not working. For each filename code is displaying output for if part as well as else part. Please help its urgent. for usercusttop in `echo ${filename}|sort|uniq|cut -c 1-${actualwordcount}` do ... (2 Replies)
Discussion started by: findprakash
2 Replies

8. Shell Programming and Scripting

For loop not working...! :(

Could some one help me on this... For loop is working...! for x in $i do for y in $j do z=`echo $y | awk '{print $2}'` if then FS=`/usr/bin/echo $y` echo $FS >>$Basic_location/out.csv fi done CPRT="Cpoyright @ BTOIDCIM" done (3 Replies)
Discussion started by: bullz26
3 Replies

9. Shell Programming and Scripting

if loop is not working

Hello i am trying to remove a line using an input file , but this depends upon user interaction here is the sample #!/bin/sh echo "Please enter whether you want to remove Profile" read value1 if ;then sed /movie/d temp.txt> temp3.txt else echo "Script didnot remove profile" fi ... (3 Replies)
Discussion started by: ranga27
3 Replies

10. Shell Programming and Scripting

Loop not working

Apologize if this is doesn't come under this group. I have a small script to find out users who last logged in to check there mail. (Tru 64 4.0, Netscape mail 3.6) -----> cat $1|awk -F: '$2=="SMTP-Accept" && $5~/@maildomain/ {s=$5;u++;las=substr($1)} END {for (i in u) {print... (2 Replies)
Discussion started by: nitin
2 Replies
Login or Register to Ask a Question