1
void main(){
    char tech[30][30],fname[50];
    int tn,i=0;
    FILE *fp;

    printf("File name\n");
    gets(fname);

    printf("No of lines\n");
    scanf("%d",&tn);

    for(i=0;i<tn;i++){ //gets here will not take anything for the first line
        printf("%d",i+1);
        gets(tech[i]);
    }

    fp=fopen(strcat(fname,".txt"),"w");

    for(i=0;i<tn;i++)
        fprintf(fp,"%s\n",tech[i]);
    fclose(fp);
}

forループ内(プログラムで説明)はgets()、1行目の文字を受け入れず、2行目の入力を直接要求します。どうしてこんなことに?

4

2 に答える 2

2

改行文字を消費しなかったため、stdin後でクリーンアップする必要があります。scanfscanf

#include <stdio.h>

/* Consume characters remaining in the input stream. */
void clean_stdin(void) 
{
    int c;
    while ((c = getchar()) != '\n' && c != EOF)
        ;
}


int main(void)
{
    int tn;

    /* ... */

    scanf("%d", &tn);
    clean_stdin();

    /* ... */

    return 0;
}

また、避けるべきですgets、それは減価償却されます。

于 2012-10-20T15:53:58.630 に答える
0

たとえば、gets()関数の前に別のscanf()関数を使用できます。

#include <stdio.h>

#include <stdio.h>

#include <string.h>

int main()

{{

int t、x、i;

char s [101];

scanf( "%d"、&t);

for(i = 0; i <t; i ++)

{{

scanf( "%d"、x); //アンパサンド(&)演算子なしでscanf()を使用できます。

printf( "文字列を入力してください:");

get(str);

printf( "\ n文字列は:");

puts(str);

printf( "\ n");

0を返します。

}

于 2020-10-11T07:46:54.090 に答える