Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Program wont read number from text file

I’m trying to write a script that takes input from a text file, runs the input in a C program and determines if the answer is correct or not. The text file includes the input value and the correct value separated by a comma. The problem is that it’s not working for -20. I think it’s something to do with the – symbol because if I change the text file to have a space in front or remove the – symbol it works. Ill put the C programs, text file and script down below. I also included a sample output. The highlighted lines shouldn’t be there. Thanks in advance!

(nb. I’m not allowed to change the text file as a valid solution)

Output
sample output

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

C programs

#include <stdio.h>
int increment(int a);
void main(void){
        int a;
        scanf("%i", &a);
        a = increment(a);
        printf("%i\n", a);
        return;
}
int increment(int a){
        int b = a;
        b = b + 1;
        return b;
}

Test Input File

1,2
-20,-19
37,38
1.4,2.4
0,1
0.0,1.0
'20','21'
lab04,lab05

Bash Script

#!/bin/bash

:
echo""
echo "start building main program"
echo "start compiling to assembly lines..."
cc main.c -S
cc increment.c -S
echo "translating to op codes"
cc main.s -c
cc increment.s -c
echo "statically linking all required op codes..."
cc main.o increment.c -o main
echo "build successfully done!"
echo "running main program"
echo ""

passedCount=0
failedCount=0

while read input
do
        IFS=,
        set $input
        correctAnswer=($2)
        #runs main with the input of $1 and stores the result in output
        output=$(./main <<< $1)

        if [ $output == $correctAnswer ]; then
                echo "input: $1, main: $output, correct: $correctAnswer ==> passed"
                passedCount=$((passedCount +1))
        fi

        if [ $output != $correctAnswer ]; then
                echo "input: $1, main: $output, correct: $correctAnswer ==> failed"
                failedCount=$((failedCount+1))
        fi

done <"./test_inputs.txt"

echo ""
echo "Total Passed: $passedCount"
echo "Total Failed: $failedCount"

>Solution :

set $input throws an error when $input starts with a dash, because set thinks that it’s a flag. Use set -- $input instead:

--  Assign any remaining arguments to the positional parameters.
    If there are no remaining arguments, the positional parameters
    are unset.

help set

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading