2015-08-19 2 views
0

Я использую fprintf для хранения значений, введенных пользователем в файл. Код работает не так, как ожидалось (первое, что после запроса «Продолжить?» Или «N:» программа автоматически принимает какое-то значение и продолжает цикл. Во-вторых, он не сохраняет значение, введенное пользователем в файл. : Я могу позволить программе оперативно использовать ли продолжать цикл или не помещая места в зсапЕ до% с, но по-прежнему файл admin_db.txt не получает заполняется правильноfprintf use in C

#include<stdio.h> 

typedef struct { 

char str[30]; 
int a[10]; 

}UNIX; 

int main() 

{ 

UNIX admin; 
char ch; 
FILE *fp; 

fp=fopen("admin_db.txt","w+"); 

while(1) 

{ 
printf("\nEnter the name of admin : "); 
scanf("%s",&admin.str); 

printf("\nEnter the age of admin : "); 
    scanf("%d",&admin.a); 

    fprintf(fp,"%s%t%d",admin.str,admin.a); 

    printf("\nDo you want to continue ? Y or N :"); 
    scanf("%c",&ch); 

    if(ch=='n' || ch=='N') 
    break; 

} 

fclose(fp); 

} 

Выход:.

Enter the name of admin : Akhil 

Enter the age of admin : 23 

Do you want to continue ? Y or N :  //Automatically taking some value          //          other than n or N and continuing loop. 
Enter the name of admin : sukhi 

Enter the age of admin : 30 

Do you want to continue ? Y or N : 
Enter the name of admin : 
Enter the age of admin : ^C 

Кроме того, sizeof file admin_db.txt имеет 0 байтов.

+2

'% T' не является допустимым [' fprintf'] (http://en.cppreference.com/w/c/io/fprintf) спецификатор (что я знаю), вы имели в виду '\ t'? – Kninnug

+3

Много раз дубликат. 'Scanf()' оставляет строку новой строки во входном буфере; 'scanf ("% c ", ...)' захватывает новую строку. Поместите пробел перед '% c': scanf ("% c ", &ch);', чтобы пропустить пробел. Проверяйте возвращаемое значение из 'scanf()' каждый раз. Если это не количество значений вы ожидали (1 в вашем коде), есть проблема. –

+0

@Kninnug вы правы Я имел в виду \ t, в любом случае ситуация такая же. – theartist33

ответ

0

Перед тем, как взять дополнительный вход, вы должны сбросить stdin. Ниже портативный метод:

int ch; 
while (((ch = getchar()) != '\n') && (ch != EOF)); 
+0

Для этого 'ch' должен быть' int' (OP имеет 'ch', объявленный как' char'). – Kninnug

+0

@Kninnug: Спасибо. Обновлен мой ответ. :) –

+0

не работает, все еще выходит, даже если я вхожу в Y или y. Кроме того, перед вводом в цикл компилятор ожидает ввода пользователем значения для выполнения цикла, если вы нажмете enter, он выйдет из-за вашей логики кода \ n ') – theartist33