我的名字变量是一个固定变量,位于结构学生中。
当我运行我的代码时,输入部分会跳过名称,或者事实上,在我放置空格的任何字符变量中,都会跳过下一个字符输入。代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
struct student{
char name[50];
char roll[10];
char batch[20];
long int mob;
};
struct student *stud;
int main()
{
int num,i;
printf("Enter the number of students in the class: ");
scanf("%d",&num);
printf("Enter the following records: ");
FILE *fp;
fp = fopen("student.txt", "w");
for (i=0;i<num;i++)
{
stud = (struct student *)malloc(sizeof(struct student)*num);
printf("\nStudent %d: ",i+1);
printf("\nEnter Name: ");
scanf("%s",stud->name);
printf("\nEnter Roll No.: ");
scanf("%s",stud->roll);
printf("\nEnter Batch: ");
scanf("%s",stud->batch);
printf("Enter mobile number: ");
scanf("%ld",&stud->mob);
fprintf(fp,"%s %s %s %ld",stud->name,stud->roll,stud->batch,stud->mob);
}
fclose(fp);
return 0;
}
答案 0 :(得分:0)
scanf
一旦遇到空格就停止读取字符。最好使用fgets
。
fgets(stud->name, 50, stdin);
请注意,如果输入字符少于数组大小,则fgets
也会读取'\n'
字符。你需要照顾它。
答案 1 :(得分:0)
正确使用scanf
非常困难。
一个问题是许多说明符会占用前导空格(例如%d
),但有些则不会(例如%s
)。
在你的情况下:
scanf("%d",&num); /* eats any white space BEFORE the number */
/* but leaves the newline from pressing */
/* enter sitting in the input buffer */
...则...
scanf("%s",stud->name); /* because %s does NOT skip leading */
/* white space, stops at the newline */
改进是:
scanf(" %.49s",stud->name); /* skip WS, ensure no overflow */