2016-10-04 14 views
0

私はC++を初めて使用しています。アイデアは、ユーザーに2つのオプションを与えることになっており、どちらのオプションもユーザーからの入力を読み取ります。しかし、どちらも実際にユーザーからの入力を読み取っておらず、代わりにプログラムの最後までスキップします。どんな助けも本当にありがとう!ありがとうございました。C++。ユーザーからの入力を受けていないようです

(注:私はそれが最初の「CIN」「数」を取るとは何かを持って知っている)

#include <stdio.h> 
#define SIZE 80 
#include <iostream> 
int main(void) 
{ 
FILE * pFile; 
int c; // variable to hold character input by user 
char sentence[SIZE]; // create char array 
char filename[SIZE]; //create filename array 
int i = 0; // initialize counter i 
int number; 
std::cout << "Give a number. 1 for file. Anything else for standard."; 
std::cin >> number; 
std::cin.clear(); 



if(number==1) 
{ 

    puts("Enter filename to append: "); 
    while ((i < SIZE-1) && (c = getchar()) != '\n') { 
    filename[i++] = c;} 

    filename[i]= '\0'; 



    //fgetc(sentence,80,stdin); 
    pFile=fopen(filename,"a"); 
    puts("Give a sentence to place in file:"); 
    while ((i < SIZE-1) && (c = getchar()) != '\n') { 
    sentence[i++] = c;} 

    sentence[i]= '\0'; 
    fputs(sentence,pFile); 
    fclose(pFile); 

    do { 
     c = fgetc (pFile); 

    } while (c != EOF); 
    fclose (pFile); 


} 
else 
{ 

    // prompt user to enter line of text 
    puts("Enter a line of text:"); 

    // use getchar to read each character 
    while ((i < SIZE-1) && (c = getchar()) != '\n') { 
    sentence[i++] = c;} 

    sentence[i]= '\0'; 

    // terminate string 
    // use puts to display sentence 

    puts("\nThe line entered was:"); 
    puts(sentence); 
} 


} 
+0

ストリームを通過しないでください。 'iostream'や' fputs、fopen、family'を使ってください。 –

+0

正確な内容がわからないのですか? C++の新しい種類.... – gllwrnce

+1

また、 'std :: string'を' char'配列に置き換えることをお勧めします。 –

答えて

1

は、私はあなたが標準入力から「入力」の文字を削除しなければならないと思います。試してみてください:

std::cin >> number; 
getchar(); 
1

(numeric_limitsの< STREAMSIZE> :: MAX()、 '\ n' は)cin.ignoreを書きます。 std :: cin.clear()の代わりに を指定すると、改行を含む入力ストリーム内のすべてが破棄されます。

#include <stdio.h> 
#include <iostream> 
#include <ios> // for <streamsize> 
#include <limits> // for numeric_limits 
#define SIZE 80 
using namespace std; 
int main(void) { 
    FILE * pFile; 
    int c; // variable to hold character input by user 
    char sentence[SIZE]; // create char array 
    char filename[SIZE]; //create filename array 
    int i = 0; // initialize counter i 
    int number; 
    std::cout << "Give a number. 1 for file. Anything else for standard."; 
    std::cin >> number; 
    //std::cin.clear(); 
    cin.ignore(numeric_limits <streamsize> ::max(), '\n'); 

    if (number == 1) { 

     puts("Enter filename to append: "); 
     while ((i < SIZE - 1) && (c = getchar()) != '\n') { 
      filename[i++] = c; 
     } 

     filename[i] = '\0'; 

     //fgetc(sentence,80,stdin); 
     pFile = fopen(filename, "a"); 
     puts("Give a sentence to place in file:"); 
     while ((i < SIZE - 1) && (c = getchar()) != '\n') { 
      sentence[i++] = c; 
     } 

     sentence[i] = '\0'; 
     fputs(sentence, pFile); 
     fclose(pFile); 

     do { 
      c = fgetc(pFile); 

     } while (c != EOF); 
     fclose(pFile); 
    } else { 

     // prompt user to enter line of text 
     puts("Enter a line of text:"); 

     // use getchar to read each character 
     while ((i < SIZE - 1) && (c = getchar()) != '\n') { 
      sentence[i++] = c; 
     } 

     sentence[i] = '\0'; 

     // terminate string 
     // use puts to display sentence 

     puts("\nThe line entered was:"); 
     puts(sentence); 
    } 
} 
関連する問題