簡體   English   中英

如何從用戶輸入的C語言中讀取字符串,放入數組並打印

[英]How to read a string from user input in C, put in array and print

我是C語言的新手,我讀過C語言書的幾章,現在我必須做作業,但我都很困惑,希望有人能幫助我。

我必須從用戶(字符數組)輸入中讀取2個字符串,最大長度為100個字符,並將其轉換為大寫字母,並在每個單詞之后用換行符\\ n打印出來。

到目前為止,我有:

int main() {
char chars[100];
int i = 0;
char str1;
char str2;
int j = 0;

scanf("\n %c", str1);
scanf("\n %c", str2);


while (str1[i] != '\0') {

    chars[i] = str1[i];
    toupper(chars[i]);
    printf(chars[i]);
    i++;

}

while (str2[j] != '\0') {

    chars[j] = str2[j];
    toupper(chars[j]);
    printf(chars[j]);
    j++;

}


return 0;
}

接受用戶的2個輸入后,它說停止運行,說運行失敗。

這是您的直接問題:

scanf("\n %c", str1);

此格式字符串告訴scanf讀取一定數量的空格,后跟單個字符,該空格將存儲在str1

@ H2CO3是正確的: scanf幾乎永遠不是從用戶讀取輸入的正確答案。 它不執行邊界檢查,並且對用戶輸入的格式過於挑剔。 一個意想不到的角色會完全混淆它。 強烈建議您盡可能使用fgets代替:

fgets(str1, 100, stdin);

如果不允許這樣做,您應該問您的教授為什么不這樣做。 認真。

如果您絕對必須使用scanf讀取此處的輸入,則可以按照其答案中所述的@ user2479209進行操作。

您的程序還有另一個問題,就是toupper(chars[i])不會更改存儲在chars[i]的值。 您必須將toupper的結果顯式分配回數組,例如:

chars[i] = toupper(chars[i]);

將str1和str2更改為array。 在前兩個scanf中使用%100 [^ \\ n]。這是讀取帶空格的字符串的正則表達式技巧。

char str1[101];
char str2[101];
scanf("%100[^\n]",str1);
scanf("%100[^\n]",str2);

這將包含兩個字符串。輸入第一個字符串后,按Enter鍵輸入第二個字符串。

我認為您也可以使用scanf_s (安全scanf )並一次收集用戶輸入的兩個字符串。 您還可以在程序頂部, main外部和#include preprocesor指令下方,將數組大小定義為符號常量,以提高靈活性。

// Symbolic constants
#define SIZE 101

char str1[SIZE];
char str2[SIZE];
scanf_s("%100s%100s", str1, SIZE, str2, SIZE);

或者:

scanf_s("%100s", str1, SIZE);
scanf_s("%100s", str2, SIZE);

我認為,如果您不想執行#define SIZE 101 ,也可以執行以下操作:

scanf_s("%100s", str1, 101);
scanf_s("%100s", str2, 101);

我是C的新手,請隨時改進此答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM