Search This Blog

Friday, December 30, 2011

How to use getline() and switch() together in c++

Add the line cin.ignore(); before the getline.
Main problem is that the stream operator >> leaves the newline in the stream so when you try to use getline it reads an empty line. ignore() will chew up the newline and let you read the string you expect.

Here is example:::

#include
#include
#include
using namespace std;
const int size=100;
const int length=50;
class list
{
   
    char name[size][length];
    //string name[size];
    int number[size];
    int count;
    char newName[length];
    //string newName;
   
    public:
    void CNT(void)
    {
        count =0; //initializes count to zero
    }

    void initialize(void);
    void check_list(void);
    void add_name(void);   
};

void list::initialize(void)
{
    int i;
    for(i=0;i    {
        number[i]=0;
        strcpy(name[i],"default");
       
    }
}

void list::add_name(void)
{   
    cin.ignore();
    cout<<"\n"<<"Enter your FULL NAME to add in list : ";
    //cin>>name[count];
    cin.getline(name[count],length);
    //cin.getline(name[count],length);
    cout<<"\n"<<"Enetr your name's associated number : ";
    cin>>number[count];
    count++;
    //cout<<"\n"<    cout<<"\n"<<"========================================================================";
}

void list::check_list(void)
{
    int i;
    int logic=0;
    cin.ignore();
    cout<<"\n"<<"Enter your FULL NAME to check the associated number with it : ";
    //cin>>newName;
    cin.getline(newName,length);
    //cin.getline(newName,length);
    for(i=0;i    {
        if(strcmp(name[i],newName)==0)
        {
            cout<<"\n"<<"Number associated with your name is : "<            logic=1;
        }
        else
        {
            if(i==size-1 && logic==0)
            {
                cout<<"\n"<<"Ack!! Your name is not in the list. Enter option number 2 to add your name in list "<<"\n";
               
            }
        }
    }
   
    //cout<<"\n"<<"name is = "<
    cout<<"\n"<<"========================================================================";
}

int main()
{
    list user;
   
    user.CNT();
    user.initialize();
    //user.check_list();
    //user.add_name();
       
    int x;
    do
    {
        cout<<"\n"<<"You can do the following : "<<" Enter approperiate number  ";
        cout<<"\n"<<" 1 : to check your name and associated number in list ";
        cout<<"\n"<<" 2 : to add your name in list ";
        cout<<"\n"<<" 3 : to Quit ";
        cout<<"\n"<<" Please select your option ";
        cin>>x;
        switch(x)
        {
            case 1: user.check_list();
            break;
            case 2: user.add_name();
            case 3: break;
            default : cout<<"\n"<<"Error in input : Please select your correct option ";
        }   
    }while(x!=3);
   
   
    cout<<"\n";
    return 0;
   
}

Use get() to read a string that contains spaces

Use get() to read a string that contains spaces

#include  
#include  
using namespace std; 
 
int main() 

  char str[80]
 
  cout << "Enter your name: "
  cin.get(str, 79)
 
  cout << str << '\n'
 
  return 0
}
Enter your name: Joe
Joe

Use of Get() function in c

/* gets example */
#include 

int main()
{
  char string [256];
  printf ("Insert your full address: ");
  gets (string);
  printf ("Your address is: %s\n",string);
  return 0;
}

get() and put() function use

#include
main( )
{
char name[30] ;
printf ( "Enter your name\n" ) ;
gets ( name ) ;

puts ( "Welcome to codesnipr.....");
puts ( name ) ;
getch();
}

Use of Getline() in C++

Example

1
2
3
4
5
6
7
8
9
10
11
// getline with strings
#include 
#include 
using namespace std;

int main () {
  string str;
  cout << "Please enter full name: ";
  getline (cin,str);
  cout << "Thank you, " << str << ".\n";
}

C Array of String

A String is an array of char objects. An array of string can be declared and handled like a 2d(two dimensional) arrays.

C Array of String

     
In this section you will learn how to create an array of string in C.
A String is an array of char objects. An array of string can be declared and handled like a 2d(two dimensional) arrays. You can see in the given example that we have declare a 2 dimensional character array consisting of three 'rows' and twelve 'columns'. The array is initialized with three character strings. In C, a format specifier %s is used with the printf to print the string.
Here is the code:

ARRAYSTR.C





#include 
#include 
void main() {
  clrscr();
  char arr[3][12]"Rose""India""technologies" };
  printf("Array of String is = %s,%s,%s\n", arr[0], arr[1], arr[2]);
  getch();
}

C String

Strings are arrays of chars. String literals are words surrounded by double quotation marks.
 
"This is a static string"
To declare a string of 49 letters, you would want to say:
 
char string[50];
This would declare a string with a length of 50 characters. Do not forget that arrays begin at zero, not 1 for the index number. In addition, a string ends with a null character, literally a '\0' character. However, just remember that there will be an extra character on the end on a string. It is like a period at the end of a sentence, it is not counted as a letter, but it still takes up a space. Technically, in a fifty char array you could only hold 49 letters and one null character at the end to terminate the string.

TAKE NOTE: char *arry; Can also be used as a string. If you have read the tutorial on pointers, you can do something such as:
 
arry = new char[256];
which allows you to access arry just as if it were an array. Keep in mind that to use delete you must put [] between delete and arry to tell it to free all 256 bytes of memory allocated.

For example:
 
delete [] arry.
Strings are useful for holding all types of long input. If you want the user to input his or her name, you must use a string. Using cin>> to input a string works, but it will terminate the string after it reads the first space. The best way to handle this situation is to use the function cin.getline. Technically cin is a class (a beast similar to a structure), and you are calling one of its member functions. The most important thing is to understand how to use the function however.

The prototype for that function is:
 
istream& getline(char *buffer, int length, char terminal_char);
The char *buffer is a pointer to the first element of the character array, so that it can actually be used to access the array. The int length is simply how long the string to be input can be at its maximum (how big the array is). The char terminal_char means that the string will terminate if the user inputs whatever that character is. Keep in mind that it will discard whatever the terminal character is.

It is possible to make a function call of cin.getline(arry, 50); without the terminal character. Note that '\n' is the way of actually telling the compiler you mean a new line, i.e. someone hitting the enter key.

For a example:
 
#include 

using namespace std;

int main()
{
  char string[256];                               // A nice long string

  cout<<"Please enter a long string: ";
  cin.getline ( string, 256, '\n' );              // Input goes into string
  cout<<"Your long string was: "<< string < 
Remember that you are actually passing the address of the array when you
 pass string because arrays do not require an address operator (&) 
to be used to pass their address. Other than that, you could make '\n' 
any character you want (make sure to enclose it with single quotes to 
inform the compiler of its character status) to have the getline 
terminate on that character.


 
cstring is a header file that contains many functions for manipulating strings. One of these is the string comparison function.
 
int strcmp ( const char *s1, const char *s2 );
strcmp will accept two strings. It will return an integer. This integer will either be:
 
Negative if s1 is less than s2.
Zero if s1 and s2 are equal.
Positive if s1 is greater than s2.
Strcmp is case sensitive. Strcmp also passes the address of the character array to the function to allow it to be accessed.
 
char *strcat ( char *dest, const char *src );
strcat is short for string concatenate, which means to add to the end, or append. It adds the second string to the first string. It returns a pointer to the concatenated string. Beware this function, it assumes that dest is large enough to hold the entire contents of src as well as its own contents.
 
char *strcpy ( char *dest, const char *src );
strcpy is short for string copy, which means it copies the entire contents of src into dest. The contents of dest after strcpy will be exactly the same as src such that strcmp ( dest, src ) will return 0.
 
size_t strlen ( const char *s );
strlen will return the length of a string, minus the terminating character ('\0'). The size_t is nothing to worry about. Just treat it as an integer that cannot be negative, which it is. Here is a small program using many of the previously described functions:
 
#include  //For cout
#include   //For the string functions

using namespace std;

int main()
{
  char name[50];
  char lastname[50];
  char fullname[100]; // Big enough to hold both name and lastname
  
  cout<<"Please enter your name: ";
  cin.getline ( name, 50 );
  if ( strcmp ( name, "Julienne" ) == 0 ) // Equal strings
    cout<<"That's my name too.\n";
  else                                    // Not equal
    cout<<"That's not my name.\n";
  // Find the length of your name
  cout<<"Your name is "<< strlen ( name ) <<" letters long\n";
  cout<<"Enter your last name: ";
  cin.getline ( lastname, 50 );
  fullname[0] = '\0';            // strcat searches for '\0' to cat after
  strcat ( fullname, name );     // Copy name into full name
  strcat ( fullname, " " );      // We want to separate the names by a space
  strcat ( fullname, lastname ); // Copy lastname onto the end of fullname
  cout<<"Your full name is "<< fullname <<"\n";
  cin.get();
}

Safe Programming

The above string functions all rely on the existence of a null terminator at the end of a string. This isn't always a safe bet. Moreover, some of them, noticeably strcat, rely on the fact that the destination string can hold the entire string being appended onto the end. Although it might seem like you'll never make that sort of mistake, historically, problems based on accidentally writing off the end of an array in a function like strcat, have been a major problem. Fortunately, in their infinite wisdom, the designers of C have included functions designed to help you avoid these issues. Similar to the way that fgets takes the maximum number of characters that fit into the buffer, there are string functions that take an additional argument to indicate the length of the destination buffer. For instance, the strcpy function has an analogous strncpy function
 
char *strncpy ( char *dest, const char *src, size_t len );
which will only copy len bytes from src to dest (len should be less than the size of dest or the write could still go beyond the bounds of the array). Unfortunately, strncpy can lead to one niggling issue: it doesn't guarantee that dest will have a null terminator attached to it (this might happen if the string src is longer than dest). You can avoid this problem by using strlen to get the length of src and make sure it will fit in dest. Of course, if you were going to do that, then you probably don't need strncpy in the first place, right? Wrong. Now it forces you to pay attention to this issue, which is a big part of the battle.

Compare strings: strcmp

Compare strings: strcmp



#include 
#include 

int main()
{
  char word1[20];
  char word2[20];

  printf("\n first word:\n1: ");
  scanf("%s", word1);                                 /* Read the first word    */

  printf(" second word:\n 2: ");
  scanf("%s", word2);                                 /* Read the second word   */

  /* Compare the two words */
  if(strcmp(word1,word2== 0)
    printf("identical words");
  else
    printf("%s comes before %s"(strcmp(word1, word20? word2 : word1, (strcmp(word1, word20? word2 : word1);
}