I'm trying to play a simple file in my c code and so I looked up how to do it on Stack Overflow, but when I tried to apply the answer, which was to download FMOD and use it, I got an error.
The code was:
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <inc/fmod.h>
FSOUND_SAMPLE* handle;
int main()
{
// init FMOD sound system
FSOUND_Init (44100, 32, 0);
// load and play mp3
handle=FSOUND_Sample_Load (0,"mp3.file",0, 0, 0);
FSOUND_PlaySound (0,handle);
// wait until the users hits a key to end the app
while (!_kbhit())
{
}
// clean up
FSOUND_Sample_Free (handle);
FSOUND_Close();
}
but the error told me that:
"gcc -Wall -c "Cases.c" (in directory: C:\Users\xeobi\Documents\C Files)
Cases.c:5:10: fatal error: inc/fmod.h: No such file or directory
5 | #include <inc/fmod.h>
| ^~~~~~~~~~~~
compilation terminated.
Compilation failed."
I am making a game and I have to add some sounds effects and Music.
I Googled it and I found The flowing Code:
#include <conio.h>
#include "inc/fmod.h"
FSOUND_SAMPLE* handle;
int main ()
{
// init FMOD sound system
FSOUND_Init (44100, 32, 0);
// load and play mp3
handle=FSOUND_Sample_Load (0,"my.mp3",0, 0, 0);
FSOUND_PlaySound (0,handle);
// wait until the users hits a key to end the app
while (!_kbhit())
{
}
// clean up
FSOUND_Sample_Free (handle);
FSOUND_Close();
}
But when I compile it I got the flowing error:
➜ Desktop gcc main.c
main.c:1:10: fatal error: 'conio.h' file not found
#include <conio.h>
^~~~~~~~~
1 error generated.
Well, firstly <conio.h> is a C++ library and you're programming in C. It's different!
Then, I remember a C code I wrote years ago, main.c has got the following code (comments are in italian because I am italian):
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "header.h"
int main(){
register unsigned char x='2';
printf("digitare tasti:\n");
while(1){
while(1){
if(x=='2'){/*blocco2*/ while(x!='1' && x!='3'){x=getch(); scala2(x);}}
if(x=='1'){/*blocco1*/ while(x!='2' && x!='3'){x=getch(); scala1(x);}}
if(x=='3'){/*blocco3*/ while(x!='1' && x!='2'){x=getch(); scala3(x);}}
}
}
system("PAUSE");
return 0;
}
Then, this is the other source file, called file.c:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "header.h"
void scala1(unsigned char x){
if(x=='a')beep(131,50);
if(x=='s')beep(147,50);
if(x=='d')beep(165,50);
if(x=='f')beep(175,50);
if(x=='g')beep(196,50);
if(x=='h')beep(220,50);
if(x=='j')beep(247,50);
if(x=='k')beep(262,50);
if(x=='l')beep(294,50);
if(x=='w')beep(139,50);
if(x=='e')beep(156,50);
if(x=='r')beep(185,50);
if(x=='t')beep(208,50);
if(x=='y')beep(233,50);
}
void scala2(unsigned char x){
if(x=='a')beep(262,50);
if(x=='s')beep(294,50);
if(x=='d')beep(330,50);
if(x=='f')beep(349,50);
if(x=='g')beep(392,50);
if(x=='h')beep(440,50);
if(x=='j')beep(494,50);
if(x=='k')beep(523,50);
if(x=='l')beep(587,50);
if(x=='w')beep(277,50);
if(x=='e')beep(311,50);
if(x=='r')beep(370,50);
if(x=='t')beep(415,50);
if(x=='y')beep(466,50);
}
void scala3(unsigned char x){
if(x=='a')beep(523,50);
if(x=='s')beep(587,50);
if(x=='d')beep(659,50);
if(x=='f')beep(698,50);
if(x=='g')beep(784,50);
if(x=='h')beep(880,50);
if(x=='j')beep(988,50);
if(x=='k')beep(1046,50);
if(x=='l')beep(1175,50);
if(x=='w')beep(554,50);
if(x=='e')beep(622,50);
if(x=='r')beep(740,50);
if(x=='t')beep(831,50);
if(x=='y')beep(932,50);
}
The last one, the file header.h. It's code is the following one:
void scala1(unsigned char x);
void scala2(unsigned char x);
void scala3(unsigned char x);
All the source files must be in the same directory. You compile main.c and then, you just need to press a,s,d,..y and 1,2,3. Try! It works, of course if you want to change part of the code, you can do. I hope you enjoy my program, it's funny :)
Following this question, I'm trying to use sysconf to get the number of processors on a Linux machine:
#include <unistd.h>
int main()
{
...
int CPUs = sysconf(_SC_NPROCESSORS_ONLN);
...
}
However, the compiler gives me this error:
error: implicit declaration of function 'sysconf'
Am I doing something wrong? I tried to also add #include <sys/sysinfo.h> but nothing changed.
#include <stdio.h>
#include <stdlib.h>
...
int function () {
FILE *f;
f = fopen("list.txt", "rb+");
...
int value;
if (_chsize_s(f, value) == 0) return 1;
}
For some reason, the above snippet of code, when run in MS Visual Studio, generates an error at the _chsize_s() function. The following message pops up:
Debug Assertation Failed!
Expression: (fh >= 0 && (unsigned)fh < (unsigned)_nhandle)
I have no idea what to make of this, much less how to fix it. Any help would be much appreciated.
You are ignoring the compiler's warnings or have them disabled. In order to fix the implicit declaration warning, you must include the header for _chsize_s:
#include <io.h>
This will fix the implicit declaration warning, and uncover the error, that _chsize_s is being called with the wrong type. The correct way to call it is:
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
...
int function(void) {
FILE *f;
f = fopen("list.txt", "rb+");
...
int value;
if (_chsize_s(_fileno(f), value) == 0) return 1;
}
This shows how important it is not to ignore compiler warnings (with exceptions... most sane people will define _CRT_SECURE_NO_WARNINGS when writing C with MSVC).
I was trying to set the timezone of my system, and was trying to use settimeofday(), which takes a timezone struct as an argument, but just read that that struct is now obsolete (http://linux.about.com/library/cmd/blcmdl2_settimeofday.htm) How could I go about doing this?
Thanks in advance.
EDIT: Ugh, I feel really stupid.
I created a link.c and compiled it:
#include <stdio.h>
void main()
{
printf("This is the link \n");
}
Created a target.c, and compiled it:
#include <stdio.h>
void main()
{
printf("This is the target \n");
}
and then tried the symlink function in a test program:
#include <unistd.h>
void main()
{
int garbage = symlink("/home/imandhan/pythonTests/link", "/home/imandhan/pythonTests/target");
printf(garbage);
}
This gives me a segmentation fault for some reason. Am I doing something wrong?
See tzset(3) for setting timezone for an application.
For the whole system - symlink /etc/localtime to appropriate file under /usr/share/zoneinfo/.