#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10
void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void prints_both(int list1[BTT], int list2[BTT]);
void create_pirolito(int list[BTT])
{
for(int i=0; i<BTT; i )
{
list[i]=rand()%10;
}
}
void create_retardado(int list[BTT])
{
for(int i=0; i<BTT; i )
{
list[i]=rand()%20;
}
}
void prints_both(int list1[BTT], int list2[BTT])
{
int i=0;
int j=0;
for(int z=0; z<BTT; z )
{
printf("(- -)\n", list1[i], list2[j]);
i ;
j ;
}
}
void compare_lists(int list1[BTT], int list2[BTT])
{
char x='X';
for(int i=0; i<BTT; i )
{
for(int j=0; j<BTT; j )
{
if(list1[i]==list2[j])
{
list1[i]==(int)(x);
}
}
printf("\n");
}
}
int main()
{
int pirolito[BTT];
int retardado[BTT];
create_pirolito(pirolito);
create_retardado(retardado);
compare_lists(pirolito, retardado);
prints_both(pirolito, retardado);
return 0;
}
我的目的是比較兩個不同的串列,只要有相等,保存在該索引中的數字就會換成字母“X”,這僅在 pirolito 串列中,但是當我編譯時沒有錯誤,只有一個大空間,然后遵循兩個串列的列印,但在各自的等式中沒有字符“X”。如何在這樣的重復數字上列印帶有 X 的串列: 串列:pirolito[3, 6, 8, 9, 7, 3, 6, 1, 0, 4] 延遲[3, 17, 12, 18, 11, 16, 6, 10, 0, 15] 輸出:[X, 6, 8, 9, 7, 3, X, 1, X, 4] [3, 17, 12, 18, 11, 16, 6, 10, 0, 15]
uj5u.com熱心網友回復:
洗掉了未使用的包含檔案。
(主要問題 1 of 2)
list1[i]==(int)(x);是一個比較。你想=在這里分配。通過傳入模值 將這兩個
create_函式重新設計為一個呼叫。通常意味著函式分配變數,但在這種情況下,呼叫者分配陣列并且只希望函式初始化它。init()create(不固定)比較意味著只讀操作,但您更新第一個串列。也許回傳一個新串列?我添加了一條評論并將第二個串列設為 const 以突出顯示奇怪的用法。另一個不錯的選擇是結合比較和列印函式,它們只生成預期的輸出,但將兩個串列都保留為只讀。這兩個函式共享 MARKER 常量這一事實強烈暗示它們可能應該結合起來。
(主要問題 2 of 2)
prints_both()列印出十進制數字,因此它將列印 88 而不是“X”。為此,您需要檢測它是否為 88,然后將其列印為 char '%c'。順便說一句,當值域與您的特殊值重疊時,這是一個糟糕的設計。看上面。print_both()使用 3 個具有相同值的不同索引變數。只用一個。prints_both()正在列印一條似乎沒有用的新行。(不固定)。考慮將長度傳遞給需要它的函式,而不是依賴 BTT 常量。
這是生成的程式:
#include <stdio.h>
#include <stdlib.h>
#define BTT 10
#define MARKER 'X'
// list1 may be updated
void compare_lists(int list1[BTT], const int list2[BTT]) {
for(int i=0; i<BTT; i ) {
for(int j=0; j<BTT; j ) {
if(list1[i]==list2[j]) {
list1[i]=MARKER;
}
}
}
}
void init(int list[BTT], int modulo) {
for(int i=0; i<BTT; i ) {
list[i]=rand() % modulo;
}
}
void prints_both(const int list1[BTT], const int list2[BTT]) {
const char *normal = "(- -)\n";
const char *duplicate = "(, -)\n";
for(int i=0; i<BTT; i ) {
printf(list1[i] != MARKER ? normal : duplicate, list1[i], list2[i]);
}
}
int main(void) {
int pirolito[BTT];
int retardado[BTT];
init(pirolito, 10);
init(retardado, 20);
compare_lists(pirolito, retardado);
prints_both(pirolito, retardado);
}
這是一個運行示例:
( X 2)
( X 7)
( X 10)
( 5 19)
( X 3)
( 5 6)
( X 0)
( X 6)
( 9 12)
( 1 16)
uj5u.com熱心網友回復:
列印:
%d - 將有符號整數轉換為十進制表示
您的輸出將永遠不會顯示字符X,因為指令是列印特定值的十進制表示。
因此在您的列印功能中:
if (list1[i] == (int)'X')
printf("(%c -)\n", list1[i], list2[j]); //output X
else
printf("(- -)\n", list1[i], list2[j]); //output decimal
您當然可以省略%c轉換并改用此陳述句(因為我們知道list1[i] == 'X'):
printf("(X -)\n", list2[j]); //output X
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527066.html
標籤:C列表功能类型转换器
