【问题标题】:string with ints and chars - C带有整数和字符的字符串 - C
【发布时间】:2017-02-11 23:15:49
【问题描述】:
#include <stdio.h>
#include<stdlib.h>

int main()
{
   char first[10], last[10], id[10];
   int stdnum;
   FILE *fptr;
   fptr = fopen("C:\\c\\program.txt","w");

   if(fptr == NULL)
   {
      printf("Error!");   
      exit(1);             
   }

   else 
   {

       //first name
       printf("Enter name: ");
       scanf("%s", first);
       fprintf(fptr,"%s ",first);


       //last name
       printf("Enter last name: ");
       scanf("%s ", last);
       fprintf(fptr,"%s", last);


       //id
       printf("Enter id: ");
       scanf("%s %d", id, &stdnum);


       fprintf(fptr,"%s\n", id);
       fprintf(fptr,"%d\n", stdnum);

       fclose(fptr);

       return 0;
    }
}

我正在编写一个程序,询问用户姓名、姓氏和学号。学号格式为小写字母后跟 8 位数字。 当我运行此代码时,我可以输入名字和姓氏。在我输入姓氏并在 cygwin 中按 Enter 后,控制台给了我一个空白行,我必须在其中输入至少一个字符或数字才能显示“输入学生 ID”。

Enter name: bob
Enter last name: jones




1
Enter id: a00998877

那么文件输出是这样的:

“鲍勃·琼斯11”

我希望输出是这样的:

“鲍勃·琼斯 a00998877”

我做错了什么?

【问题讨论】:

  • 在读取姓氏时,尝试删除scanf("%s ", last);%s 后面的空格。
  • 你应该看看proper C formatting

标签: c printf scanf


【解决方案1】:

你为什么要扫描这行的两个输入:

scanf("%s %d", id, &stdnum);

id 是一个char 数组,可以保存字母数字输入。你可以去掉stdnum的使用。

scanf("%s", id);

我有一个example-with-stdin-stdout

【讨论】:

    【解决方案2】:
    char first[10], last[10], id;
    

    id 是单个字符,不需要数组。

    scanf("%s", last);
    

    删除 s 后的空格

    scanf(" %c%d", %id, &stdnum)
    

    id 从字符串更改为 char

    fprintf(fptr,"%c\n", id)
    

    这里一样,改成char

    【讨论】:

    • 为什么 %id 在第三条语句中有一个百分号?
    • % 指的是 id 的地址,而不是 id 的值。在你使用一个像指针一样的数组并给出第一个单元格的地址之前。
    • 我这样做时出现错误:'%' token scanf("%s %d", %id, &stdnum);
    • 将 s 更改为.c。正如我所解释的,它需要字符,而不是字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多