|
i corrected that it still doesn't work.
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[100];
int goals;
}match;
match check();
int main()
{
match team, temp;
printf("Enter goals:\n");
scanf("%d", &team.goals);
fflush(stdin);
temp = check();
printf("Name: %s\t\tGoals: %d\n", temp.name, team.goals);
return 0;
}
match check()
{
char c;
match temp;
printf("Name: \n");
gets(temp.name);
if((c=temp.name[0])==EOF || c == '\n')
{
printf("Invalid entry!");
check();
}
return(temp);
}
|
|
|
|
|
Tarun Jha wrote: i corrected that it still doesn't work. My question was not meant to fix your logic error. It was a compiler error.
As it stands now, if you were somehow able to detect an invalid entry, a recursive call to check() is made but it would not return anything to the original caller. You'll also need to address this issue.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Richard and I made sure you realized you that you cant use 'gets' ... it's a drop dead.
'gets' only returns chars .. EOF is an int (-1 usually)
End-of-file - Wikipedia[^]
please look at the difference between 'getc' (returns an int .. yipeee EOF safe) and 'gets' (returns char boo)
Then it's not real hard
int c;
int namelen = 0; do {
c = getc(stdin); temp.name[namelen++] = (char) c; } while (c !=EOF && c != '\n'); temp.name[namelen-1] = '\0';
That should do what you want and I commented what each line does.
In vino veritas
modified 3-Jan-18 21:00pm.
|
|
|
|
|
I showed you where to find the answer two days ago: read the documentation.
|
|
|
|
|
I am not able to understand the logic used in the program below. Can someone elaborate how does the logic works in this program.
<pre>#include <stdio.h>
struct TIME
{
int seconds;
int minutes;
int hours;
};
void differenceBetweenTimePeriod(struct TIME t1, struct TIME t2, struct TIME *diff);
int main()
{
struct TIME startTime, stopTime, diff;
printf("Enter start time: \n");
printf("Enter hours, minutes and seconds respectively: ");
scanf("%d %d %d", &startTime.hours, &startTime.minutes, &startTime.seconds);
printf("Enter stop time: \n");
printf("Enter hours, minutes and seconds respectively: ");
scanf("%d %d %d", &stopTime.hours, &stopTime.minutes, &stopTime.seconds);
differenceBetweenTimePeriod(startTime, stopTime, &diff);
printf("\nTIME DIFFERENCE: %d:%d:%d - ", startTime.hours, startTime.minutes, startTime.seconds);
printf("%d:%d:%d ", stopTime.hours, stopTime.minutes, stopTime.seconds);
printf("= %d:%d:%d\n", diff.hours, diff.minutes, diff.seconds);
return 0;
}
void differenceBetweenTimePeriod(struct TIME start, struct TIME stop, struct TIME *diff)
{
if(stop.seconds > start.seconds){
--start.minutes;
start.seconds += 60;
}
diff->seconds = start.seconds - stop.seconds;
if(stop.minutes > start.minutes){
--start.hours;
start.minutes += 60;
}
diff->minutes = start.minutes - stop.minutes;
diff->hours = start.hours - stop.hours;
}
Thank you
modified 31-Dec-17 18:35pm.
|
|
|
|
|
The logic does not work because it is subtracting the stop time from the start time. It should subtract the start time from the stop time to get the difference. For example a start time of 11:33:47 and a stop time of 15:21:10 gives a difference of -4:12:37. The correct answer is 3:47:23. You can work through the logic by using some random times and working through each line,changing values as necessary and doing the subtractions.
|
|
|
|
|
It solves the following equation for X.
{stop time} + {X} = {start time}
If you walk through examples by hand you will see that the code appears to solve that equation correctly.
However like the other response I too find it counter intuitive.
As noted in the other response the expected difference would be to subtract start from stop. This solution ends up with negative values.
It also treats a time period on a fixed clock - one that does not cross midnight. Which is nonsensical in human terms.
|
|
|
|
|
jschell wrote: {stop time} + {X} = {start time} Really? Only if X is negative; or the interval stops before it starts.
|
|
|
|
|
Richard MacCutchan wrote: Only if X is negative;
It is negative.
|
|
|
|
|
yes i find that problem too....
|
|
|
|
|
I have noticed that CMainFrame::ActivateFrame is not called normally, when I start the app from debugger, or from Windows Explorer.
void CMainFrame::ActivateFrame(int nCmdShow)
{
MessageBox(_T("AAAA"));
CMDIFrameWnd::ActivateFrame(nCmdShow);
}
And I have read CFrameWnd::ActivateFrame
[^]here that this method are called "Call this member function to activate and restore the frame window so that it is visible and available to the user. This member function is usually called after a non-user interface event such as a DDE, OLE, or other event that may show the frame window or its contents to the user."
Can you give an example when this method is called ? I am trying to start the my app in hidden mode, passing in this method (CMainFrame::ActivateFrame) nCmdShow = SW_HIDE;
Thank you.
|
|
|
|
|
Flaviu2 wrote: I have noticed that CMainFrame::ActivateFrame is not called normally, when I start the app from debugger, or from Windows Explorer.
void CMainFrame::ActivateFrame(int nCmdShow)
{
MessageBox(_T("AAAA"));
CMDIFrameWnd::ActivateFrame(nCmdShow);
}
Did you try to replace MessageBox call with a TRACE and check whether your text is displayed in the Output window?
|
|
|
|
|
Yes, I have:
void CMainFrame::ActivateFrame(int nCmdShow)
{
TRACE(_T("======================================================AAAA\n"));
CMDIFrameWnd::ActivateFrame(nCmdShow);
}
and there is no trace in output window ...
|
|
|
|
|
I want to create schema file xsd file programmatically in c++ so that i can add validation information for each element and read back the tree structure with validation.
Is this possible in c++?
|
|
|
|
|
Yes, of course it is possible, assuming that you understand how to create the schema in the first place. Take a look at some of the links at: create xsd schema - Google Search[^].
|
|
|
|
|
I wanted to programmatically create/read xsd file in c++?
We have lot of tools to generate xsd from xml and vice versa...
We also have lot of example in .net but wanted it in c++ code.
I am using msxml6 to parse xml files and wanted to do the same for xsd files aswell.
|
|
|
|
|
Fine, that is what you want. But what problem are you having with your code?
|
|
|
|
|
I am unable to write c++ code to parse XSD files.
Very less resources to begin with.
|
|
|
|
|
That seems a bit odd.
The normal process for using an xsd would be as follows.
1. Create the xsd manually.
2. Create program to accept xml as input
3. Validate the input from 2 using 1.
Nothing it the above really has anything to do with a "tree'.
One can use the xsd to automatically generate classes which can be used to parse and consume the input. At least in my experience validating the input that way (exclusively in terms of the xsd) doesn't lead to very useful errors. However using the xsd itself as a input along with the xml leads to better errors. But that could have had to do with the generation framework that I was using.
|
|
|
|
|
This is my task in vc++
- To create GUI for user to add tree structure where each tree node can contain attribute, restrictions etc..
- Once user configures we write it to xsd files.
- If user want to alter he reopens xsd file and alters any properties of xsd file.
possible?
|
|
|
|
|
brraj wrote: possible?
Of course.
An XSD is just an XML file with a certain format.
So map the 'attributes' allowed in your app to appropriate constructs in an XSD. You generate the xsd using the same framework that you would for xml.
|
|
|
|
|
It is observed memory will be allocated for a structure only when a structure variable is declared.
But when I tried this program, it printed address:
#include<stdio.h>
struct emp{
int age;
char name[30];
}emp1;
main()
{
printf("%p is the address\n",&emp1.name);
}
Why ?
modified 28-Dec-17 2:21am.
|
|
|
|
|
Because you have declared the variable emp1 . As I have suggested to a number of other people recently, please get hold of a C language study guide and learn, at least, the basics of the language.
|
|
|
|
|
Is it a generational thing? It seems more and more that folks are jumping right into chapter 7 of the book and then getting completely lost when things from the previous 6 chapters are being referenced and they can't understand why or where they came from.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
modified 28-Dec-17 12:14pm.
|
|
|
|
|
It seems to be, and we are seeing more and more of this type of question here. I guess they have all bought into the idea that you can make a lot of money as a developer with minimal training. Just pray they are not working at your bank or local hospital.
|
|
|
|