打印字符串时缺少第一个字符

问题描述 投票:0回答:1
# include <stdio.h>
# include <stdlib.h>
#include <string.h>
void main (void)

{
int size, i,j;
printf("enter no. of employee\n");
scanf("%d", &j);
printf("size of employee id\n");
scanf("%d",&size);
char *m[j];
for (i=0; i<j;i++) {
m[i] = (char*) malloc(size*sizeof(char));
}

for (i=0; i<j;i++) {
printf("Enter employee id of %d\n ",i+1);
getchar();
gets(m[i]);
}
printf("employee id are\n ");
for (i=0; i<j;i++){
puts(m[i]);
}
}

我做了一个程序,可以动态地从用户那里获取关于 no 的输入。员工和他们的 id 大小然后 打印它但是每次打印时我的输出都缺少第一个字符而且我无法发现错误

c for-loop char c-strings puts
1个回答
1
投票

对于符合 C 标准的启动器,不带参数的函数 main 应;被声明为

int main( void )

函数 gets 不安全且不受 C 标准支持,而是使用标准 C 函数

scanf
fgets
.

至于你的问题,那么第一个字符由于这个调用而丢失了

getchar();

在for循环中。

你可以改写。

while ( getchar() != '\n' );
for ( i = 0; i < j; i++ ) 
{
    printf("Enter employee id of %d\n ",i+1);
    fgets( m[i], size, stdon );
    m[i][ strcspn( m[i], "\n" ) ] = '\0';
}

你应该在退出程序之前释放所有分配的内存

for ( i = 0; i < j; i++ )
{
    free( m[i] );
}

此外,如果您检查这些 scanf 调用的结果,程序会更加安全

scanf("%d", &j);

scanf("%d",&size);

至少输入的值大于 0.

© www.soinside.com 2019 - 2024. All rights reserved.