Code:
#include <stdio.h>
#include "cs50.h"
int main(void)
{
string answer = get_string("What's your name? ");
printf("Hello, %s\n", answer);
}
I'm doing a course on edX called CS50's Introduction to Computer Science and in week 1 lecture 1 I have to write some code that asks the user what his/her name is and says "Hello" with the name after it, I've been fixing this for over 2 hours now wasting away time. I downloaded the cs50 library and put it into my vscode.
VScode files
Here's the syntax error too.
PS C:\Users\Felip\Documents\Microsoft VS Code\New Code> cd "c:\Users\Felip\Documents\Microsoft VS Code\New Code\CS50IntroClanguage\" ; if ($?) { gcc name.c -o name } ; if ($?) { .\name }
C:\Users\Felip\AppData\Local\Temp\ccYgzUcR.o:name.c:(.text+0x1e): undefined reference to `get_string'
collect2.exe: error: ld returned 1 exit status
PS C:\Users\Felip\Documents\Microsoft VS Code\New Code\CS50IntroClanguage>
You need #include <cs50.h> instead of #include "cs50.h". "" means that the file you're including is in the same folder as your code. <> Means that it's installed on the system.
Related
EDIT My problem is solved Thanks all very much
the problem was that I only included cs50.h but didn't include cs50.c and that the library I had was an old one containing only GetInt but not get_int
when I downloaded the new library everything worked
I'm taking CS50x course and I want to use get_int function which is included in cs50 library on VS code ...
I downloaded cs50 library and copied cs50.h and cs50.c to d:\MinGW\bin
my code is
#include <stdio.h>
#include <cs50.h>
int main(void)
{
int age = get_int("Age?");
int days=age*365;
printf("Your age is %i which means that you are %i days old", age, days);
}
when I try to compile it using
gcc 0.c -o 0
it writes
0.c: In function 'main':
0.c:7:15: warning: implicit declaration of
function 'get_int' [-Wimplicit-function-declaration]
7 | int age = get_int("Age?");
| ^~~~~~~
d:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\AbdoMAD\AppData\Local\Temp\ccTefKbe.o:0.c:(.text+0x15): undefined reference to `get_int'
collect2.exe: error: ld returned 1 exit status
the auto complete of vs code doesn't have get_int but it has GetInt
But when I use it and the code is
#include <stdio.h>
#include <cs50.h>
int main(void)
{
printf("Age?")
int age = GetInt();
int days=age*365;
printf("Your age is %i which means that you are %i days old", age, days);
}
it returns
d:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\AbdoMAD\AppData\Local\Temp\cc3NVsiz.o:1.c:(.text+0x1a): undefined reference to `GetInt'
collect2.exe: error: ld returned 1 exit status
What should I do to use get_int or at least GetInt in VS code??
If you want get_int, don't write it GetInt.
If you use https://sandbox.cs50.io, you can do:
gcc 0.c -lcs50 -o 0
and you first code will work.
To get more information, try googling "c link to library".
#include <stdio.h>
#include <math.h>
int exp_for_level(int n) {
return (int)(100 * pow(n, 2.3));
}
int main(){
int x;
x = exp_for_level(6);
printf("%d", x);
return 0;
}
I receive the following error when I run this code on an online compiler
/tmp/cc28S7ML.o: In function exp_for_level':
main.c:(.text+0x19): undefined reference to `pow'
collect2: error: ld returned 1 exit status
How do I rectify this?
After I couldn't get it to work on the online compiler, I followed advice from some other threads on
The file is stored under a file grades.c on my mac
I've tried entering this
$ gcc - Wall - lm -o grades grade . c
into my terminal and i just get zsh error: command not found
Any ideas on what the issue is here too?
The online compiler I'm using is
https://www.tutorialspoint.com/compile_c_online.php
EDIT: in my post, in main I'd miswritten the function as exp_to_level instead of exp_for_level. Didn't copy paste the entire code as it's too long. I narrowed it down and retyped it to the portion that yields the error.
There are some errors in your code, you have defined a function exp_for_level but you use exp_to_level.
Then your x variable is not defined
If you fix your code like this:
#include <stdio.h>
#include <math.h>
int exp_for_level(int n) {
return (int)(100 * pow(n, 2.3));
}
int main(){
int x = exp_for_level(6);
printf("%d", x);
return 0;
}
and you compile:
gcc -Wall powtest.c -o powtest -lm
it works.
About the error on the online compiler:
The undefined reference error occurs because you are missing -lm linker option.
Edit the online compiler command clicking on Project->Compile Options:
About this problem on your local machine:
After I couldn't get it to work on the online compiler, I followed
advice from some other threads on The file is stored under a file
grades.c on my mac I've tried entering this
$ gcc - Wall - lm -o grades grade . c
into my terminal and i just get zsh error: command not found
you don't have the compiler installed.
You should install clang, Have a look to this question
First of all your function name is wrong in the main take a look here exp_for_level
and in main its exp_to_level change one of them then also add int x in main to solve the issue.
I wrote read this code from the K&R book. But i compile it i get an error:
gcc: error: getchar.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.
Code:
#include <sys/syscall.h>
#include <stdio.h>
int getchar(void)
{
char c;
return (read(0, &c,1) == 1) ? (unsigned char) c : EOF ;
}
main()
{
printf("\nEnter the character you want to getchar: \n");
getchar();
return 0;
}
The error message is telling you that there is no file called getchar.c in the current directory to compile. That might mean that you accidentally called it getchar.c or getchar.c instead, so you should look carefully at what you called it -- it might look like it is correct, but have extra invisible characters in it.
The easiest fix is probably to open the file in your editor, and then "save as" and type in a name that has no invisible characters in it.
If you're just compiling it in the Windows environment
try
#include <sys/syscall.h>
change to
#include <io.h>
I'm getting some problems on compiling a very very simple name.c file on Mac OSX Lion.
Now, I started following Harvard CS50 course on cs50.net. I'm not totally new to programming but I was curious on how this course has been taught.
This is the source of name.c:
#include <stdio.h>
#include <cs50.h>
int
main(void)
{
printf("State your name:\n");
string name = GetString();
printf("O hai, %s!\n", name);
return 0;
}
As you can see, it requires this library: https://manual.cs50.net/CS50_Library.
Now, when I compile it, this happens:
Undefined symbols for architecture x86_64:
"_GetString", referenced from:
_main in name-vAxcar.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [name] Error 1
If I use the same GetString() cs50.c function inside my source file, it works perfectly:
#include <stdio.h>
#include <string.h>
#include <float.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
typedef char *string;
string GetString(void);
int
main(void)
{
printf("State your name:\n");
string name = GetString();
printf("O hai, %s!\n", name);
}
string
GetString(void)
{
// CODE
}
Why does this happen?
I installed the library as it says on the link above; I checked and both cs50.h and libcs50.a are respectively in /usr/local/include and /usr/local/lib.
Thank you in advance for your help.
The problem you encounter is in the linking stage, not compiling. You did not provide the implementation of GetString, only its declaration (through the .h file you #include).
To provide the implementation itself, you usually need to link against the library which includes it; this is usually done by the -l flag to g++. For example,
g++ file.cpp -lcs50
Your second sample code does link, because you manually (and explicitly) provide an implementation for GetString, though an empty one.
When I compile this code, I get the following gcc errors:
/tmp/ccUigsI6.o: In function `main':
/home/matt/Dropbox/school/2011/cs3210/test/sizeterm.c:9: undefined reference to `setupterm'
/home/matt/Dropbox/school/2011/cs3210/test/sizeterm.c:10: undefined reference to `tigetnum'
/home/matt/Dropbox/school/2011/cs3210/test/sizeterm.c:11: undefined reference to `tigetnum'
collect2: ld returned 1 exit status
make: *** [sizeterm] Error 1
Here's the code:
#include <stdio.h>
#include <term.h>
#include <curses.h>
#include <stdlib.h>
int main()
{
int nrows, ncolumns;
setupterm(NULL, fileno(stdout), (int *)0);
nrows = tigetnum("lines");
ncolumns = tigetnum("cols");
printf("This terminal has %d columns and %d rows\n", ncolumns, nrows);
exit(0);
}
Libncurses is installed correctly on my machine. I get the same results from my Arch linux laptop, and the Ubuntu server installed at my school. This particular piece of code is taken directly out of the book. Am I doing something wrong? I've done some googling and it looks as though people have had this problem before, but I can't narrow down a solution.
You forgot to actually link against ncurses. Add -lcurses to the gcc command line.
This is exactly what you find in the same book as where you found this code:
$ cc -o badterm badterm.c -lncurses
Beginning linux programming 4th edition, chapter 5: Terminals, page 196.