c - 如何在c中的一行中打印不同的数组?
问题描述
我想在一个新函数的一行中打印我所有的数组 [i],但是我的输出表中的所有内容都没有对齐。
我找不到问题出在哪里:
#include <stdio.h>
#include <stdlib.h>
void userInput();
void formOutput(int, char (*)[50], char (*)[10], int *);
void main()
{
userInput();
}
void userInput()
{ int totalSubj;
printf("\nHow many subject to be registered: ");
scanf("%d",&totalSubj);
char subjCode[totalSubj][10], subjName[totalSubj][50];
int subjCred[totalSubj];
for(int i=0;i<totalSubj;i++)
{
printf("\nSUBJECT CODE %d.: ",i+1);
scanf("%s",&subjCode[i]);
printf("SUBJECT NAME: ");
fgets(subjName[i],50,stdin);
printf("SUBJECT CREDIT: ");
scanf("%d",&subjCred[i]);
}
formOutput(totalSubj, subjName, subjCode, subjCred);
}
void formOutput(int subjTotal, char nameSub[][50], char codeSub[][10], int credSub[])
{
printf("Subject Name Subject Code Credit\n");
printf("------------------------------------------------------------------");
for(int i=0;i<subjTotal;i++)
{
printf("\n%s ",nameSub[i]);
printf("%s\t\t",codeSub[i]);
printf("%d",credSub[i]);
}
}
这是输出。
表中的值都搞砸了,有些也是重复的,这不是我想要的:
How many subject to be registered: 3
SUBJECT CODE 1.: DCS1053
SUBJECT NAME: Programming Technique
SUBJECT CREDIT: 3
SUBJECT CODE 2.: DCS1062
SUBJECT NAME: Current Issues in ICT
SUBJECT CREDIT: 3
SUBJECT CODE 3.: DCS1083
SUBJECT NAME: Object Oriented Programming
SUBJECT CREDIT: 3
Subject Name Subject Code Credit
------------------------------------------------------------------
Programming Technique
DCS1053 3
Current Issues in ICT
DCS1062 3
Object Oriented Programming
DCS1083 3
Process returned 3 (0x3) execution time : 53.708 s
Press any key to continue.
我希望我的输出看起来像这样:
Subject Name Subject Code Credit
---------------------------------------------------------------
Programming Technique DCS1053 3
Current Issues in ICT DCS1062 3
Object Oriented Programming DCS1083 3
解决方案
该函数fgets()
将换行符作为输入,并将换行符插入到变量中,你会得到灾难性的输出。
此代码可以帮助您解决问题(注释中添加了方便的解释):
#include <stdio.h>
#include <string.h>
// defining macros the maximum lengths of array as a constant
#define SUB_NAME_MAX 50
#define SUB_CODE_MAX 10
// function signature
void formed_output(int, char [][SUB_NAME_MAX], char [][SUB_CODE_MAX], int[]);
int main(void) {
int total;
printf("How many subjects to be registered? ");
scanf("%d", &total);
char sub_code[total][SUB_CODE_MAX], sub_name[total][SUB_NAME_MAX];
int sub_credit[total];
for (int i = 0; i < total; i++) {
printf("\nSUBJECT CODE %d.: ",i+1);
scanf("%s", &sub_code[i]);
printf("SUBJECT NAME: ");
fseek(stdin, 0, SEEK_END); // to avoid skipping user input
fgets(sub_name[i], SUB_NAME_MAX, stdin);
char *pos;
if ((pos=strchr(sub_name[i], '\n')) != NULL)
*pos = '\0'; // this one is the trick which will help to
// remove newline of each 'sub_name' array
printf("SUBJECT CREDIT: ");
scanf("%d", &sub_credit[i]);
}
printf("\n"); // for good-looking purpose
formed_output(total, sub_name, sub_code, sub_credit);
return 0;
}
void formed_output(int total, char name[][SUB_NAME_MAX], char code[][SUB_CODE_MAX], int cred[]) {
printf("Subject Name Subject Code Credit\n");
printf("---------------------------------------------------------------\n");
for(int i = 0; i < total; i++) {
printf("%-35s", name[i]); // left-justified for next 35 places
printf("%-22s", code[i]); // left-justified for next 22 places
printf("%d \n", cred[i]);
}
}
样本输出:
How many subjects to be registered? 3
SUBJECT CODE 1.: DCS1053
SUBJECT NAME: Programming Technique
SUBJECT CREDIT: 3
SUBJECT CODE 2.: DCS1062
SUBJECT NAME: Current Issues in ICT
SUBJECT CREDIT: 3
SUBJECT CODE 3.: DCS1083
SUBJECT NAME: Object Oriented Programming
SUBJECT CREDIT: 3
Subject Name Subject Code Credit
---------------------------------------------------------------
Programming Technique DCS1053 3
Current Issues in ICT DCS1062 3
Object Oriented Programming DCS1083 3
推荐阅读
- java - 在 Java 中解析 XML 并操作提取的数据
- javascript - 如何动态地将 JSON 键标识符表示为 JSON 对象
- java - 创建披萨配料java程序
- arrays - 通过多个对象数组反应地图并在现场显示组件?
- html - 如何使用 html 重定向到页面的某些部分
- dictionary - 如何查找和打印与用户输入匹配的字典键/值?
- kubernetes - Kubernetes 的健康检查如何与 Istio 一起工作?
- react-native - ReactNative ScrollToIndex 太慢了
- sql - 如何知道包含特定键的 JSON 列表?
- android-studio - Android Studio中的Flutter编译错误