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()不接受第一行的任何字符,它直接要求第二行输入。为什么呢?

4

2 回答 2

2

你必须stdin在你的之后清理scanf,因为scanf没有消耗换行符。

#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<字符串.h>

主函数()

{

整数 t,x,i;

字符 [101];

scanf("%d",&t);

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

{

scanf("%d",x); // 您可以使用不带与号 (&) 运算符的 scanf()。

printf("请输入你的字符串:");

获取(str);

printf("\n 你的字符串是:");

放(str);

printf("\n");

返回0;

}

于 2020-10-11T07:46:54.090 回答