Category Archives: Uncategorized

C scanf with comma separated values.

Unlike scanf function family in MATLAB, C scanf doesn’t consider the comma(,) as a delimiter for the specifier “%s.”

Let’s say we have a data file as follows.

Spiderman,Parker,99
Superman,Ken,89
Batman,Wayne,79

The following code will not work. The variable “first_name” will have the whole line “Spiderman,Parker,99″ since it thinks there is no delimiter in the line.

char first_name[50], last_name[50];
int grade;
FILE *fp = fopen("data.csv", "r");
fscanf(fp, "%s,%s,%d\n", first_name, last_name, &grade);

Here is a way to make scanf functions think the comma (,) is a delimiter.

fscanf(fp, "%[^,],%[^,],%d\n", first_name, last_name, &grade);

fscanf in MATLAB

Unlike in C/C++, fscanf in MATLAB repeats the scanning as long as the formatted text matches. It is convenient but also confusing sometimes.

For example, in a text file there are lines as follows.

Image Width Height: 800, 600
Red X Y Radius: 200, 300, 300
Green X Y Radius: 300, 400, 200
Blue X Y Radius: 500, 500, 150

We can read the first line using

dim = fscanf(fid, '%*s %*s %*s %d, %d\n');             (a)

A problem arises after this scanning since it tries to scan the next line as well with the format that is given. So even if you try to read the next line with the fscanf (b), the scanning will fail since the fscanf in (a) tries to scan the next line.

redc = fscanf(fid, '%*s %*s %*s %*s %d, %d, %d\n');    (b)

So in this specific case, it is better to use the followings.

dim  = fscanf(fid, 'Image Width Height: %d, %d\n');
redc = fscanf(fid, 'Red X Y Radius: %d, %d, %d\n');
grnc = fscanf(fid, 'Green X Y Radius: %d, %d, %d\n');
bluc = fscanf(fid, 'Blue X Y Radius: %d, %d, %d\n');

There are better ways but this would be quick fix.

No Console Output in Eclipse with CDT in Windows

In Windows the Console doesn’t display any output from printf. Let’s see an example.

int main(void) 
{
    int i;

    printf("Enter a number: ");
    scanf("%d", &i);
    printf("You entered %d\n", i);
    return EXIT_SUCCESS;
}

The text “Enter a number: ” is not shown in the Console windows of Eclipse with CDT. This is due to the fact all the stdout and stderr ouputs in Windows are buffered. So we can simply flush stdout and stderr everytime you use printf. But it is not practical solution. You may add these two lines of code in the first part of your main function.

  • setvbuf(stdout, NULL, _IONBF, 0);
  • setvbuf(stderr, NULL, _IONBF, 0);

These lines enforce stdout/stderr not to have buffers which means that all the output will be happening as soon as it takes place. One serious problem of this solution is that the program will be crashed if you start the debugger and try to step over any of printfs. So in the Debug mode, starting a new command prompt console is a good idea. Let’s me summary this workaround.

Use setvbuf for Run mode

Put this function in your main function in the first place.

void set_std_buffer_off()
{
    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);
}
int main(void)
{
    // turn off the std buffering
    set_std_buffer_off();

    // start your own code.
    ....
}

You now see outputs from printfs in your code when you run the program.

Debug mode

For the debug mode, use GDB command file.

Create a text file and named it as “gdbinit.txt” The file name is not important anyway. You may use any proper name. Open the text file and put this single line into the file and save it.

set new-console on

This line simply means that new console will be started when the debugger starts a debugging session.

Open “Preferences” (Window > Preferences). Set the text file for “GDB command file:” in C/C++ –> Debug –> GDB. Click the “Apply” button and the “OK” button.

Try to debug your program. Then you will see a command prompt when the debugger starts. All outputs and inputs will be happening in the new command prompt without having any troubles.

Using Eclipse with CDT in Windows

Unlike in Mac OS X, it is harder to install Eclipse with CDT in Windows than it looks. This is partially because the Windows OS does not have Java Runtime Environment as default settings. Another problem is that there are two versions, 32-bit and 64-bit, under the same name of the OS. x64-base processors can have either 32-bit OS or 64-bit OS.

Windows 32-bit or 64-bit?

First thing first. Make sure that what system type of Windows you are using. If your PC is pretty new, most likely you have 64-bit Windows. If not, it could be 32- or 64-bit. One simple way to find out which version you are using is to check the “Program Files” folder name. If your system has “Program Files (x86)” along with “Program Files” then your OS is for 64-bit. You may open Control Panel to see the version. The “System type:” in “System and Security->System” tells 64-bit OS or 32-bit OS. Again using x64-bit based processor does not guarantee that the OS type is 64-bit.

Java Runtime Environment

Eclipse is an executable program written in Java and built for Java. Java executables need Java Virtual Machine. Java Runtime Environment or JRE is a basic package to run Java programs. There are several “Editions” in Java. Java SE (Standard Edition) is good for Java applications on desktops and servers. You may find Java “Development” Kit, or JDK while you are googling Java SE Download. This is for Java Developers and includes JRE. We do not need this version because we just want to run a Java program, Eclipse. Download one “jre” according to your OS type. x64  means it is for Windows 64-bit OS. x86 is for Windows 32-bit OS. Install it. Clear check boxes when the Java Setup asks to install something along with Java unless you really really really want to install the toolbar for your Web browsers.

MinGW

The next step is to install Minimalists for GNU for Windows or MinGW. This is for someone who wants to use the GNU Compiler Collection to develop native Windows applications without installing Cygwin (a Unix-like environment and command line interface for Windows). Use an installer to install necessary packages. The installer, mingw-get-setup.exe, can be downloaded from http://sourceforge.net/projects/mingw/files/Installer/ Run the installer and select two packages: mingw32-base and mingw-gcc-g++. Then select the menu item, “Apply Changes” in the “Installation” menu.

Eclipse CDT

Find a Eclipse package with the latest CDT at http://www.eclipse.org/cdt/downloads.php. And again download one according to your OS type. There are Eclipses with CDT for Windows 32-bit and 64-bit.

Project – Hello World ANSI C Project

Select “New – C Project.” Put a name in “Project name:” And select “MinGW GCC” as your “Toolchains:” The Toolchain is a set of programming tools. And we are using MinGW GCC as the toolchain.

Build the Project Manually at First

The newly generated project must be built manually at least once before you run the program. Go to and select the menu “Project – Build Project.”

That’s it.

iPhone Mockup

This is a simple online iPhone app mockup tool.

iOS Simulator Location Servies Settings

In iOS Simulator, if you choose “Don’t Allow” when you are prompted “Your App” Would Like to Use Your Current Location, there is no obvious way to turn it on back.

Here is a solution.

  1. Start Settings in the simulator.
  2. Select “Reset Location & Privacy” in the General – Reset.
  3.  Select “Reset Warnings” when you are prompted.

That’s all.

Now you will see the selection dialog when you start your app using Core Location.

Moved my web site for courses to WordPress.com

This is a trial to utilize a free blog and an online file sharing site to manage my course web pages. After comparing WordPress with Blogger, I chose WordPress because it provides more features including a better editor. All files were uploaded to Box.com that allows us to have links to share.

I started moving my personal web page from Kettering (http://www.kettering.edu/~jkwon) to WordPress.com. For now, the new web site only has the Teaching section. More sections will come soon.

Test Driving

Controlled via the WiFi connection. The robot runs an http server. The phone connected to the server can send commands to the robot.

Knife-edge scanning microscopy rapidly maps new blood vessels in organs

News article on News Medical about Knife-edge scanning microscopy rapidly maps new blood vessels in organs.

Must-have podcast for brain scientists

The Brain Science Podcast, hosted by Ginger Campbell, MD, is a must-have podcast for brain scientists. Dr. Campbell interviews brain scientists including medical doctors, neuroscientists, computer scientists, students, and business persons as well.

You can listen to this. But the best thing is that you can also ‘read’ this podcast since the website provides episode transcripts.

http://docartemis.com/brainsciencepodcast/

 

Follow

Get every new post delivered to your Inbox.

Join 147 other followers